2016-04-18 15 views
2

Ich versuche, für einen anderen Rahmen (ohne Namen oder ID) zu wechseln, aber Ausnahme bekommen.Zugriff verweigert beim Wechsel zu anderen Frame (. Net WebBrowser, MsHTML) Cross-Domain-Ausnahme

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

Versuchte andere Art und Weise, aber die gleiche Ausnahme:

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

Ausnahme:

Zugriff verweigert. (Ausnahme von HRESULT: 0x80070005 (E_ACCESSDENIED))

Ich verstehe, dass eine Cross-Domain Grund tun wir Lösung für diese Fälle

Dankten

Antwort

1

Sie können fangen und ignorieren die Ausnahme, oder zwicken Sie die Sicherheitseinstellungen, um Cross-Domain-Scripting zu ermöglichen:

  • leiten Sie eine Klasse von WebBrowser
  • create a nested class derived from WebBrowser.WebBrowserSite (die einzige Möglichkeit, die Sie von der geschachtelten Klasse ableiten können)
  • Override CreateWebBrowserSiteBase und eine neue Instanz Ihrer Webbrowser-Site zurückgeben.
  • implementieren IServiceProvider auf der Web-Browser-Website
  • IServiceProvider.QueryService implementieren, so dass es eine IInternetHostSecurityManager Implementierung zurückzugibt, wenn der SID_SInternetHostSecurityManager Service
  • Griff IInternetHostSecurityManager.GetSecurityId angefordert wird, und gibt die gleiche Domain-ID für alle Websites, die Sie Cross-Domain wollen Skripting zum Arbeiten. Für andere Websites geben Sie jeder Domäne eine andere ID. Beachten Sie, dass sich Ihre Anwendung für domänenübergreifende Skriptangriffe öffnet, sodass Sie allen Domänen vertrauen müssen, die dieselbe ID verwenden.
  • Verwenden Sie den neuen Webbrowser in der Form