2011-11-09 44 views
0

我正在處理廣告/彈出式窗口阻止程序BHO,我正嘗試從「downloadcomplete」事件訪問網站的html,因此我可以過濾所有廣告和惡意uris。在事件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

錯誤的事件,你可以「玩」與DocumentComplete的DOM,而不是DownloadComplete。

另外我會建議你使用CComPtr,這樣你就不需要在每個接口上調用release()。

+0

但是在DocumentComplete事件中,廣告和惡意js已經被加載到瀏覽器中。 – user979390

+0

如果你想修改DOM,那麼瀏覽器必須已經加載了html。 –

+0

但在DownloadComplete上,不是完整的html已經存在,並且即將由mshtml處理?不能被攔截? – user979390