如何使用 WPF WebBrowser 覆盖网页上的 btnSubmit_onclick javascript 函数?

Posted

技术标签:

【中文标题】如何使用 WPF WebBrowser 覆盖网页上的 btnSubmit_onclick javascript 函数?【英文标题】:How can I overwrite the btnSubmit_onclick javascript function on a web page using the WPF WebBrowser? 【发布时间】:2010-10-10 05:05:17 【问题描述】:

我正在使用与 WinForms 版本不同的 WPF WebBrowser 控件,并且这个优秀网站的许多建议在 WPF 中根本不起作用。

如何覆盖网页上的btnSubmit_onclick() javascript 函数?

这个函数会生成一个我想绕过的确认对话框(比如“你确定吗?”)。基本上我想注入一个新函数btnSubmit_onclick(),它将替换现有的函数,我可以省略烦人的确认对话框。我可以访问 MShtml 和所有页面对象,但很难在页面标题处注入脚本。到目前为止,我得到了:

mshtml.IHTMLDocument2 doc = (mshtml.IHTMLDocument2)webBrowser.Document;
mshtml.IHTMLElementCollection heads = doc.all.tags("head") as mshtml.IHTMLElementCollection;
mshtml.IHTMLElement head = heads.item(null, 0) as mshtml.IHTMLElement;
mshtml.IHTMLElement se = doc.createElement("script") as mshtml.IHTMLElement;
se.innerHTML = "function btnSubmit_onclick()  alert('here we are'); ";

但是现在我需要先将这个新的脚本元素注入到头部对象中,然后再注入其他脚本,我希望它会覆盖下游现有的btnSubmit_onclick() 函数。

我没有成功尝试 head.injectAdjusentHTML,即使我使用 DEFER 属性,它也拒绝将任何脚本注入到标题中。

我该怎么做?

【问题讨论】:

【参考方案1】:

我认为您需要将它添加到头部的末尾,而不是在其他之前注入它。我相信 javascript 是一种最后一胜的交易。

【讨论】:

【参考方案2】:

我没有测试过,只是一个猜测: 试试这个:

// For this code to work: add the Microsoft.mshtml .NET reference
mshtml.IHTMLDocument2 doc = WebBrowser1.Document as mshtml.IHTMLDocument2;
doc.parentWindow.execScript("document.body.onsubmit=new function() alert('here we are'); ;");

【讨论】:

以上是关于如何使用 WPF WebBrowser 覆盖网页上的 btnSubmit_onclick javascript 函数?的主要内容,如果未能解决你的问题,请参考以下文章

使用 WPF WebBrowser 控件时如何抑制脚本错误?

wpf下如何去除webbrowser的滚动条

WPF使用Webbrowser操作网页的主要代码

WPF中WebBrowser 如何在页面加载的时候注入js脚本

WPF中使用WebBrowser

C#webbrowser 跨域访问时 如何获得对此网页的绝对权限