2

無知で申し訳ありません。あなたは私に物事を説明しなければならないでしょう、私は新しい水域に足を踏み入れています. 私はJavaのバックグラウンドを持っていますが、主にphp、javascriptです。

http://www.codeproject.com/Articles/19971/How-to-attach-to-Browser-Helper-Object-BHO-with-C

私はこの記事にいくつかの独自の変更を加えました。私の質問は、具体的には、Web ページの「トップ レベル フレーム」、つまり親ドキュメントを検出する方法です。私が実行するコードはOnDocumentComplete、ページ上の iframe も完了すると実行されます。

私の機能と私が実装したソリューションは、実際には正しい結果を生成していません。

public class BHO:IObjectWithSite
{
    WebBrowser webBrowser;
    HTMLDocument document;

    public void OnDocumentComplete(object pDisp, ref object URL)
    {
        document = (HTMLDocument)webBrowser.Document;
        string href = document.location.href;

        //get top level page
        if (href == URL.ToString())
        {
            HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create("http://mysite.com");
            WebReq.Method = "POST";
            WebReq.ContentType = "application/x-www-form-urlencoded";
            byte[] buffer = Encoding.ASCII.GetBytes("string");
            WebReq.ContentLength = buffer.Length;
            Stream PostData = WebReq.GetRequestStream();
            PostData.Write(buffer, 0, buffer.Length);
            PostData.Close();
            // Prepare web request and send the data.
            HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
            StreamReader streamResponse = new StreamReader(WebResp.GetResponseStream(), true);
            string Response = streamResponse.ReadToEnd();

            Newtonsoft.Json.Linq.JObject json = Newtonsoft.Json.Linq.JObject.Parse(Response);
            string active = json["active"].ToString();
            //print to screen
            System.Windows.Forms.MessageBox.Show(active, "Title");

        }
    }

ほとんどの場合、document.location.href一致するかどうかのチェックは機能しますが、保証されていません。URLその結果、1 ページの読み込みで複数の Web リクエストとポップアップが発生します。

4

1 に答える 1

0

最も簡単な方法は、Web ブラウザー オブジェクト ( IWebBrowser2) をメソッドのオブジェクト プロパティに格納するSetSiteことです (例は C++ ですが、C# に変換するのは簡単です)。

CComQIPtr<IServiceProvider> pServiceProvider(pUnkSite);
if (!pServiceProvider) {
  return E_FAIL;
}

pServiceProvider->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, (LPVOID*)&m_WebBrowser.p);
if (!m_WebBrowser) {
  return E_FAIL;
}

これにより、ブラウザー ポインターがオブジェクト member に格納されますm_WebBrowserpDisp次に、パラメータをOnDocumentComplete次のように比較できます。

CComQIPtr<IWebBrowser2> webBrowser(pDisp);
if (webBrowser == m_WebBrowser) {
    // This is the top-level page.
}
于 2012-10-18T11:00:36.023 に答える