如何使用浏览器控件将javascript注入iframe中
本文关键字:注入 iframe javascript 何使用 浏览器 控件 | 更新日期: 2023-09-27 18:13:53
我试图阻止某些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);