2016-04-18 2 views
2

J'essaie de passer à une autre trame (sans nom ni identifiant) mais en obtenant une exception.Accès refusé lors du passage à une autre trame (.Net WebBrowser, MsHTML) inter-domaine Exception

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

Essayé autre manière, mais la même 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"); 

Exception:

L'accès est refusé. (Exception de HRESULT: 0x80070005 (E_ACCESSDENIED))

je comprends c'est une raison inter-domaines, avons-nous la solution pour que les cas

Merci de

Répondre

1

vous pouvez attraper et ignorer l'exception, ou modifiez les paramètres de sécurité pour autoriser les scripts interdomaines:

  • create a nested class derived from WebBrowser.WebBrowserSite
  • redéfinir CreateWebBrowserSiteBase et renvoyer une nouvelle instance de votre site webbrowser.
  • mettre en œuvre IServiceProvider sur le site web browser
  • mettre en œuvre IServiceProvider.QueryService il retourne une implémentation de IInternetHostSecurityManager lorsque le service SID_SInternetHostSecurityManager est demandé
  • poignée IInternetHostSecurityManager.GetSecurityId et retourner le même identifiant de domaine pour tous les sites que vous souhaitez interdomaine script pour travailler avec. Pour les autres sites Web, attribuez un ID différent à chaque domaine. Notez que cela ouvre votre application aux attaques de script interdomaines. Vous devez donc approuver tous les domaines partageant le même ID. Utilisez le nouveau navigateur Web sous la forme