2015-09-22 3 views
2

J'essaie de bloquer certaines fonctions javascript qui affichent des alertes à l'utilisateur.Comment injecter javascript dans un iframe avec contrôle webbrowser?

Je suis actuellement en utilisant ce code, mais il ne fonctionne pas:

private void InjectAlertBlocker() 
    {    
     string alertBlocker = @"window.alert = function() { }; 
         window.print = function() { }; 
         window.open = function() { }; 
         window.onunload = function() { }; 
         window.prompt = function() { }; 
         window.confirm = function() { }; 
         window.onbeforeunload = function() { };"; 

     wb.Document.InvokeScript("execScript", new Object[] { alertBlocker, "JavaScript" }); 
    } 

La commande fonctionne WebBrowser en arrière-plan et certains sites qui doivent être visités montrent des alertes qui apparaissent au hasard à l'utilisateur .

J'ai essayé des codes similaires mais je n'ai réussi à faire fonctionner aucun de ces codes.

MISE À JOUR:

Après quelques vérifications, il semble que ce code ne alertes bloc. Cependant, dans mon cas particulier, l'alerte vient d'un iframe, et c'est pourquoi mon code ne le bloque pas. L'exemple d'alerte javascript sur w3schools est un exemple parfait pour cela: http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_alert

Comment puis-je remplacer les scripts dans un iframe?

MISE À JOUR 2:

J'ai essayé d'injecter du code Javascript (fourni par Buzinas dans sa réponse) dans la page principale, qui itérer tous les iframes et passer outre à leurs fonctions d'alerte, mais il est à l'origine des erreurs les plus du temps en raison de la même politique d'origine.

Répondre

1

Au lieu d'appeler un script, vous pouvez l'ajouter comme élément <script>:

HtmlElement head = wb.Document.GetElementsByTagName("head")[0]; 
HtmlElement scriptEl = wb.Document.CreateElement("script"); 
IHTMLScriptElement el = (IHTMLScriptElement)scriptEl.DomElement; 
el.text = @"window.alert = function() { }; 
      window.print = function() { }; 
      window.open = function() { }; 
      window.onunload = function() { }; 
      window.onbeforeunload = function() { };"; 
head.AppendChild(scriptEl); 

Mise à jour

Pour vous assurer que tous les iframes sont bloqués, vous pouvez faire quelque chose comme ceci:

HtmlElement head = wb.Document.GetElementsByTagName("head")[0]; 
HtmlElement scriptEl = wb.Document.CreateElement("script"); 
IHTMLScriptElement el = (IHTMLScriptElement)scriptEl.DomElement; 
el.text = @"window.alert = function() { }; 
      window.print = function() { }; 
      window.open = function() { }; 
      window.onunload = function() { }; 
      window.onbeforeunload = function() { }; 

      var iframes = document.getElementsByTagName('iframe'); 
      for (var i = 0; i < iframes.length; i++) { 
       var win = iframes[i].contentWindow; 
       win.alert = function() { }; 
       win.print = function() { }; 
       win.open = function() { }; 
       win.onunload = function() { }; 
       win.onbeforeunload = function() { }; 
      }"; 
head.AppendChild(scriptEl); 
+0

C'est l'un des codes similaires que j'ai essayés. Ça ne fonctionne pas. – Kidades

+0

Il semble que la page à l'origine de l'alerte se trouve à l'intérieur d'une iframe et c'est pourquoi elle n'est pas bloquée. J'ai mis à jour le message original. – Kidades

+0

Je reçois une erreur de script "Objet ne supporte pas cette action", sur toutes les lignes après var win = iframes [i] .contentWindow; – Kidades