我正在使用Webbrowser控件访问网站:
webBrowser1.ScriptErrorsSuppressed = true;
webBrowser1.Navigate("http://www.mywebsite.com/");
我收到以下错误消息。
SecurityError: Error #2060: Security sandbox violation:
ExternalInterface caller
http://www.anotherwebsite.com/flash.swf
cannot access
http://www.mywebsite.com/.
当我导航到初始网址时,它不在本地域中。我没有打电话到本地的任何地方,反之亦然。这只是网站javascript中的一个错误。
我如何捕获此错误,因为它会一直将MessageBox提示放在屏幕上?
答案 0 :(得分:1)
我的申请中有这个确切的问题,这让我很生气!
我认为webBrowser控件上的ScriptErrorsSupressed标志应该处理这个,但事实并非如此。经过大量的拖网搜索后,我在MSDN页面上找到了答案(谁会想到!):
// Hides script errors without hiding other dialog boxes.
private void SuppressScriptErrorsOnly(WebBrowser browser) {
// Ensure that ScriptErrorsSuppressed is set to false.
browser.ScriptErrorsSuppressed = false;
// Handle DocumentCompleted to gain access to the Document object.
browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(browser_DocumentCompleted);
}
private void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
((WebBrowser)sender).Document.Window.Error += new HtmlElementErrorEventHandler(Window_Error);
}
private void Window_Error(object sender, HtmlElementErrorEventArgs e) {
// Ignore the error and suppress the error dialog box.
e.Handled = true;
}
就是这样,简单。
只需挂钩错误事件并设置e.Handled = true。您不需要手动将事件处理程序添加到browser.DocumentCompleted(您可以在事件属性部分中执行此操作)但您明白了。