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

时间:2016-04-18 08:15:59

标签: c# webbrowser-control mshtml ihtmldocument2

我试图切换另一个帧(没有名字或ID)但是获得了Exception。

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");

例外:

  

访问被拒绝。 (HRESULT的例外情况:0x80070005   (E_ACCESSDENIED))

我知道这是一个跨域的原因,我们是否有针对该案例的解决方案

感谢' S

1 个答案:

答案 0 :(得分:2)

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

  • 从WebBrowser派生一个类
  • create a nested class derived from WebBrowser.WebBrowserSite(您可以从嵌套类派生的唯一方法)
  • 覆盖CreateWebBrowserSiteBase并返回webbrowser站点的新实例。
  • 在webbrowser网站上实施IServiceProvider
  • 实现IServiceProvider.QueryService,以便在请求SID_SInternetHostSecurityManager服务时返回IInternetHostSecurityManager实现
  • 处理IInternetHostSecurityManager.GetSecurityId并为要使用跨域脚本编制的所有网站返回相同的域ID。对于其他网站,请为每个域提供不同的ID。请注意,这会打开您的应用程序以进行跨域脚本攻击,因此您需要信任所有共享相同ID的域。
  • 的形式使用新的网络浏览器