3

別のフレーム (名前または 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");

例外:

アクセスが拒否されました。(HRESULT からの例外: 0x80070005 (E_ACCESSDENIED))

クロスドメインの理由であることは理解しています。その場合の解決策はありますか

ありがとう

4

1 に答える 1

2

例外をキャッチして無視するか、セキュリティ設定を微調整してクロスドメイン スクリプトを許可することができます。

  • WebBrowser からクラスを派生させる
  • WebBrowser.WebBrowserSite から派生したネストされたクラスを作成します(ネストされたクラスから派生できる唯一の方法)
  • CreateWebBrowserSiteBase をオーバーライドし、Web ブラウザー サイトの新しいインスタンスを返します。
  • Web ブラウザー サイトに IServiceProvider を実装する
  • IServiceProvider.QueryService を実装して、SID_SInternetHostSecurityManager サービスが要求されたときに IInternetHostSecurityManager の実装を返すようにする
  • IInternetHostSecurityManager.GetSecurityId を処理し、クロスドメイン スクリプティングを使用するすべてのサイトに対して同じドメイン ID を返します。他の Web サイトの場合は、各ドメインに異なる ID を指定してください。これにより、アプリケーションがクロスドメイン スクリプティング攻撃を受ける可能性があるため、同じ ID を共有するすべてのドメインを信頼する必要があることに注意してください。
  • フォームで新しい Web ブラウザを使用する
于 2016-05-16T02:45:24.173 に答える