用webbrowser访问网站时,如果网站有alert,window.open之类的JS,会在桌面上出现弹出框,并且必须点掉才会完成访问.
我在网上找了屏蔽这些弹出框的方法,就是添加事件Navigated,在里面重新定义这些函数.像下面这样
WebBrowser wbWebBrowser = new WebBrowser();
wbWebBrowser.Navigated += new WebBrowserNavigatedEventHandler(wbWebBrowser_Navigated);
......
private void wbWebBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e) //屏蔽alert等弹框弹窗的情况
{
WebBrowser wbWebBrowser = (WebBrowser)sender;
StringBuilder sb = new StringBuilder();
sb.AppendLine("function alert(){return;}");
sb.AppendLine("function confirm(){return;}");
sb.AppendLine("function showModalDialog(){return;}");
sb.AppendLine("function window.open(){return;}");
sb.AppendLine("function prompt(){return;}");
string strJS = sb.ToString();
IHTMLWindow2 win = (IHTMLWindow2)wbWebBrowser.Document.Window.DomWindow;
win.execScript(strJS, "Javascript");
win = null;
}
我在自己电脑上试的时候发现确实有效果,不加的话访问有弹出框的网站就会弹出内容.加了以后就不会弹出,可以正常访问完成了.
但把生成的EXE文件放到别人电脑上,他们运行之后都依然会弹出提示框.并且他们装的系统,和配置,跟我自己电脑上的好像也都差不多.
目前我测试发现的规律是,似乎安装了visual studio的电脑就会像我自己电脑一样不弹窗,没安装的就会弹,即使他们装了.net framework也是会弹窗的.
请问这是什么原因呢
我知道原因了,原来是安装了.NET SDK的机器上自带Microsoft.mshtml.dll.
只安装了.NET framework的机器上没有,需要把
C:Program FilesMicrosoft.NETPrimary Interop AssembliesMicrosoft.mshtml.dll
放到和EXE文件同一目录下,才可以