Webbrowser中陷阱远程安全沙箱违规

时间:2015-03-24 21:18:03

标签: c# webbrowser-control

我正在使用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提示放在屏幕上?

1 个答案:

答案 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(您可以在事件属性部分中执行此操作)但您明白了。