Доступ к источнику HTML по событию DownloadComplete? - PullRequest
0 голосов
/ 09 ноября 2011

Я работаю над блокировкой рекламы / всплывающих окон BHO и пытаюсь получить доступ к html-сайту из события «downloadcomplete», чтобы я мог отфильтровать всю рекламу и вредоносный uris.

Мой код выглядит примерно так:

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 из этого события?

1 Ответ

0 голосов
/ 09 ноября 2011

Неверное событие, вы можете «играть» с dom на DocumentComplete, а не с DownloadComplete.

Также я бы посоветовал вам использовать CComPtr, поэтому вам не нужно вызывать release () для каждого интерфейса.

...