2011-11-09 6 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으로 "재생"할 수 있습니다.

또한 모든 인터페이스에서 release()를 호출 할 필요가없는 CComPtr을 사용하는 것이 좋습니다.

+0

그러나 DocumentComplete 이벤트에서 광고 및 악의적 인 j는 이미 브라우저에로드되고 있습니다. – user979390

+0

DOM을 수정하려면 브라우저가 html을로드해야합니다. –

+0

그러나 DownloadComplete에서 완전한 html이 이미 어딘가에 존재하지 않으며 mshtml에서 처리 할 예정입니까? 요격 할 수있는 약점은 무엇입니까? – user979390