gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:49:26 27 4
gpt4 key购买 nike

我正在尝试切换到另一个框架(没有名称或 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 派生一个类
  • create a nested class derived from WebBrowser.WebBrowserSite (您可以从嵌套类派生的唯一方法)
  • 覆盖 CreateWebBrowserSiteBase 并返回您的网络浏览器站点的新实例。
  • 在网络浏览器站点上实现 IServiceProvider
  • 实现 IServiceProvider.QueryService,以便在请求 SID_SInternetHostSecurityManager 服务时返回 IInternetHostSecurityManager 实现
  • 处理 IInternetHostSecurityManager.GetSecurityId 并为您希望跨域脚本处理的所有站点返回相同的域 ID。对于其他网站,给每个域一个不同的 ID。请注意,这会使您的应用程序面临跨域脚本攻击,因此您需要信任共享同一 ID 的所有域。
  • 在表单中使用新的网络浏览器

关于c# - 切换到其他框架(.Net WebBrowser、MsHTML)时拒绝访问跨域异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36688639/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com