2010-10-03 8 views
5

Ce site: http://blog.joins.com/media/folderListSlide.asp?uid=ddatk&folder=3&list_id=9960150Arrêter alerte javascript pop-up dans webbrowser C# contrôle

a ce code:

<script>alert('¿Ã¹Ù¸¥ Çü½ÄÀÌ ¾Æ´Õ´Ï´Ù.');</script> 

donc mon contrôle du navigateur Web afficher un popup, comment puis-je contourner le menu contextuel sans utiliser sendkeys entrer ??

+0

4 espaces avant qu'une ligne le formate en tant que code. Pour ce faire, sélectionnez les lignes et tapez 'ctr-k' –

+0

Je suis confus quant à la raison pour laquelle vous ne pouvez pas simplement supprimer ou commenter cette ligne? –

+0

Je suis désolé de le dire, mais cette question et les questions précédentes de @ robert sont toutes vaguement bot-ish. Des proxies; formulaire automatisé de soumission; supprimer les alertes du navigateur sans 'sendkeys'. De poisson. Très poisson. – Andrew

Répondre

1

Je pense que vous naviguez sur une page dans alert(xxx) dans son javascript en utilisant WebBroswer dans une application WinForm? Vous pouvez essayer:

broswer.Navigated += (sender, args) => 
    { 
    var document = (sender as WebBrowser).DocumentText; 
    //find the alert scripts and remove/replace them 
    } 
+0

désolé je ne comprends pas cela, où je dois mettre ce code ?? Pour remplacer, je pourrais utiliser WebBrowser1.DocumentText = WebBrowser1.DocumentText.Replace ("alert", ""); – robert

+0

@robert: ce code est placé dans le constructeur du formulaire. Et vous ne pouvez pas remplacer 'alert' par vide. parce que 'alert (" bonjour ");' sera '(" bonjour ");', ce qui se traduit probablement par des erreurs js. Vous devez trouver une méthode appropriée à remplacer, cela dépend vraiment. –

+0

voulez-vous dire que je dois mettre le code dans private void InitializeComponent() { ICI ?? – robert

4

Si vous avez l'intention de ne pas utiliser la fonction jamais alert() sur votre page, vous pouvez simplement l'ignorer. .: par exemple

<script type="text/javascript"> 
alert = function(){} 
</script> 

Si vous avez besoin d'utiliser la fonction d'alerte de JavaScript, vous pouvez 'surcharge' il:

<script type="text/javascript"> 
var fnAlert = alert; 
alert = function(message,doshow) { 
    if (doshow === true) { 
     fnAlert(message); 
    } 
} 
alert("You won't see this"); 
alert("You will see this",true); 
</script> 
+0

je dois « clair »/éviter que pop-up de C#, je n'ai pas de code d'accès à ce site, est juste un site aléatoire qui bloque toute mon application avec la popup – robert

+0

Il semble qu'ils ne veulent pas que votre application accède à leur contenu. Est-ce vrai? – Andrew

+0

nop est juste une page aléatoire, je viens de découvrir que je ne peux pas trouver et réécrire javascript lorsque le javascriot est seul. si le code source a seulement ce code comment vous pouvez bloquer cette popup – robert

5

Dans le gestionnaire d'événements ProgressChanged, vous insérez un élément de script qui remplace la fonction Javascript alert avec une fonction de votre propre, qui ne fait rien:

private void webBrowser1_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e) 
    { 
     if (webBrowser1.ReadyState == WebBrowserReadyState.Complete) 
     { 
      HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0]; 
      HtmlElement scriptEl = webBrowser1.Document.CreateElement("script"); 
      IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement; 
      string alertBlocker = "window.alert = function() { }"; 
      element.text = alertBlocker; 
      head.AppendChild(scriptEl); 
     } 
    } 

Pour que cela fonctionne, vous devez ajouter une référence à Microsoft.mshtml et use mshtml; dans votre formulaire.

+0

Je recommanderais cette [réponse] (http://stackoverflow.com/a/6222430/326608) pour une solution gérée uniquement pour l'injection de javascript qui ne nécessite pas de déployer un PIA comme le fait mshtml. – user326608

2
solution

donnée est erronée

private void webBrowser1_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e) 
{ 
    if (webBrowser1.ReadyState == WebBrowserReadyState.Complete) 
    { 
     HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0]; 
     HtmlElement scriptEl = webBrowser1.Document.CreateElement("script"); 
     IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement; 
     string alertBlocker = "window.alert = function() { }"; 
     element.text = alertBlocker; 
     head.AppendChild(scriptEl); 
    } 
} 

Semble la manipulation d'un crochet de fenêtres pour le message est une solution

-1

Vous pouvez désactiver tous les popups en mettant

webBrowser.ScriptErrorsSuppressed = true; 

Malgré son nom, ce paramètre bloque réellement tous les popups, y compris alert()

Questions connexes