在WebBrowser中的另一个域中获取iFrame中的文本的任何解决方法?

您可能会首先认为由于XSS限制而无法实现。 但我试图从托管WebBrowser的应用程序访问此内容,而不是从站点中的javascript代码访问。

我理解是不可能的,并且不应该通过非hacky手段从javascript访问此内容,因为这将是一个很大的安全问题。 但是,从托管WebBrowser的应用程序中获得此限制是没有意义的。 如果我想加强我的应用程序用户的Facebook信息,我可以做一个Navigate("facebook.com")并做任何我想要的东西。 这是一个托管WebBrowser的应用程序,而不是网页。

此外,如果您使用Google Chrome浏览器访问包含其源位于其他域中的iFrame的任何网页,并右键单击其内容并单击“检查元素”,它将显示该内容。 更简单的是,如果您导航到包含其他域中的iFrame的任何网页,您将看到其内容。 如果您可以在WebBrowser上看到它,那么您应该能够以编程方式访问它,因为它必须位于内存中的某个位置。

有没有办法,不是来自DOM对象,因为它们似乎基于与javascript相同的引擎,因此受到XSS限制的限制,但是从一些更低级别的对象(如MSHTMLSHDocVw )来访问此文本?

这对你有用吗?

 foreach (HtmlElement elm in webBrowser1.Document.GetElementsByTagName("iframe")) { string src = elm.GetAttribute("src"); if (src != null && src != "") { string content = new System.Net.WebClient().DownloadString(src); //or using HttpWebRequest MessageBox.Show(content); } } 

您是否只需要一种从代码中请求内容的方法?

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webRequest.URL); request.UserAgent = webRequest.UserAgent; request.ContentType = webRequest.ContentType; request.Method = webRequest.Method; if (webRequest.BytesToWrite != null && webRequest.BytesToWrite.Length > 0) { Stream oStream = request.GetRequestStream(); oStream.Write(webRequest.BytesToWrite, 0, webRequest.BytesToWrite.Length); oStream.Close(); } // Send the request and get a response HttpWebResponse resp = (HttpWebResponse)request.GetResponse(); // Read the response StreamReader sr = new StreamReader(resp.GetResponseStream()); // return the response to the screen string returnedValue = sr.ReadToEnd(); sr.Close(); resp.Close(); return returnedValue;