2011-11-09 9 views
0

私は広告/ポップアップブロッカーBHOに取り組んでいます。イベント「downloadcomplete」からウェブサイトのhtmlにアクセスしようとしています。そのため、すべての広告と悪意のあるURLをフィルタリングできます。イベントDownloadCompleteでHTMLソースにアクセスしますか?

私のコードは次のようになります。

case DISPID_DOWNLOADCOMPLETE: 
    { 
     if(iBrowser) //IWebBrowser2* 
     { 
      HRESULT hr; 
      IUnknown *pUnkBrowser = NULL; 

      hr = iBrowser->QueryInterface(IID_IUnknown, (void**)&pUnkBrowser); 

      if(SUCCEEDED(hr) && pUnkBrowser!=NULL) 
      { 
       if(SUCCEEDED(hr)) 
       { 
        IDispatch* pHtmlDocDispatch = NULL; 

        IHTMLDocument2 * pHtmlDoc = NULL; 

        hr = iBrowser->get_Document (&pHtmlDocDispatch); 

        if (SUCCEEDED (hr) && (pHtmlDocDispatch != NULL)) 
        { 
         hr = pHtmlDocDispatch->QueryInterface (IID_IHTMLDocument2, (void**)&pHtmlDoc); 

         if (SUCCEEDED (hr) && (pHtmlDoc != NULL)) 
         { 
          IHTMLElement *pBody = 0; 

          pHtmlDoc->get_body(&pBody); 
          // I want to get the html here and filter out the ads but pBody is always null 

          if(pHtmlDoc) pHtmlDoc->Release(); 

         } 

         if(pHtmlDocDispatch) pHtmlDocDispatch->Release(); 
        } 
       } 

       if(pUnkBrowser) pUnkBrowser->Release(); 
      } 
     } 
     return S_OK; 
    } 
    break; 

がどのようにアクセスし、このイベントからHTMLを修正することができますか?

答えて

0

間違ったイベントの場合、DownloadCompleteではなくDocumentCompleteのdomで「再生」できます。

また、CComPtrを使用することをお勧めします。そうすれば、すべてのインターフェイスでrelease()を呼び出す必要はありません。

+0

しかし、DocumentCompleteイベントでは、広告と悪意のあるjが既にブラウザに読み込まれています。 – user979390

+0

DOMを変更する場合は、ブラウザがhtmlを読み込んでいる必要があります。 –

+0

しかし、DownloadComplete上では、完全なhtmlがすでにどこかに存在しておらず、mshtmlによって処理されようとしていますか?邪魔されることのないカント? – user979390

関連する問題