6

おそらく最初は、XSS の制限のために不可能だと思うでしょう。WebBrowserしかし、サイトの JavaScript コードからではなく、をホストするアプリケーションからこのコンテンツにアクセスしようとしています。

これは大きなセキュリティ上の問題になるため、javascript からこのコンテンツにアクセスすることは不可能であり、可能であってはならないことを理解しています。しかし、WebBrowser. アプリケーション ユーザーの Facebook 情報を強化したい場合はNavigate("facebook.com")、必要なことを何でも実行できます。これは、Web ページではなく、 をホストするアプリケーションですWebBrowser

また、Google Chrome を使用して、ソースが別のドメインにある iFrame を含む Web ページに移動し、そのコンテンツを右クリックして [要素の検査] をクリックすると、コンテンツが表示されます。さらに単純なことに、別のドメインの iFrame を含む Web ページに移動すると、そのコンテンツが表示されます。で確認できる場合WebBrowserは、メモリ内のどこかにある必要があるため、プログラムでアクセスできるはずです。

javascript と同じエンジンに基づいているため、XSS 制限によって制限されているように見えるため、DOM オブジェクトからではなく、MSHTMLまたはなどのより低レベルのオブジェクトからSHDocVw、このテキストにアクセスする方法はありますか?

4

2 に答える 2

6

これはあなたにとって役に立ちますか?

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);
     }
}
于 2011-09-28T19:13:23.100 に答える
0

コードからコンテンツをリクエストする方法だけが必要ですか?

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;
于 2011-09-21T19:58:11.743 に答える