切换到其他框架(.Net WebBrowser、MsHTML)时拒绝访问跨域异常

Access denied on switching to other frame (.Net WebBrowser, MsHTML) cross-domain Exception

我正在尝试切换到另一个框架(没有名称或 ID)但出现异常。

object index = 0;
var frame = (mshtml.IHTMLWindow2)workDocument.frames.item(ref index);
frameDocument = (mshtml.IHTMLDocument2)frame.document; // Exception.

尝试了其他方式但同样的异常:

webBrowser.Document.Window.Frames[0].Document.GetElementById("userName").SetAttribute("value", username);
webBrowser.Document.Window.Frames[0].Document.GetElementById("userPassword").SetAttribute("value", password);
webBrowser.Document.Window.Frames[0].Document.GetElementById("login").InvokeMember("click");

异常:

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

我知道这是一个跨域的原因,我们有针对这种情况的解决方案吗

谢谢

您可以捕获并忽略异常,或者调整安全设置以允许跨域脚本:

  • 从 WebBrowser
  • 导出 class
  • create a nested class derived from WebBrowser.WebBrowserSite(您可以从嵌套 class 派生的唯一方法)
  • 覆盖 CreateWebBrowserSiteBase 和 return 您的网络浏览器站点的新实例。
  • 在网络浏览器站点上实施 IServiceProvider
  • 实现 IServiceProvider.QueryService,因此在请求 SID_SInternetHostSecurityManager 服务时,它 return 是一个 IInternetHostSecurityManager 实现
  • 处理 IInternetHostSecurityManager.GetSecurityId 和 return 您希望跨域脚本处理的所有站点的相同域 ID。对于其他网站,给每个域一个不同的 ID。请注意,这会使您的应用程序受到跨域脚本攻击,因此您需要信任共享同一 ID 的所有域。
  • 在表单中使用新的网络浏览器