如何使用浏览器控件将javascript注入iframe中

How to inject javascript into an iframe with webbrowser control?

本文关键字:注入 iframe javascript 何使用 浏览器 控件      更新时间:2023-09-26

我试图阻止某些javascript函数向用户显示警报。

我目前正在使用这个代码,但它不工作:

    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" });
    }

网页浏览器控件在后台运行,一些需要访问的网站显示警报,随机弹出给用户。

我已经尝试过类似的代码,但无法使它们任何一个工作

更新:

经过一些检查后,似乎这段代码确实阻止了警报。然而,在我的特殊情况下,警报来自iframe,这就是为什么我的代码没有阻止它。w3schools上的javascript警报示例就是一个完美的例子:http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_alert

如何重写iframe内的脚本?

更新2:

我已经尝试注入javascript代码(由Buzinas在他的回答中提供)到主页,这将遍历所有iframe并覆盖它们的警报功能,但由于同源策略,它大多数时候会导致错误。

您可以将其附加为<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);

要确保所有iframe都被阻塞,您可以这样做:

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);