javascriptinternet-explorerbho

Process JavaScript-generated page in BHO


I'm developing a BHO and need to process page content on OnDocumentComplete event. But I found a problem - there are no page content at that moment, because it is generated later by JavaScript.

I was trying to call myself by using Navigate method with JavaScript function that must call me, but without any success. I've searched by keywords , , and found no useful results.

Thanks for any advices.

EDIT1: Creating a new thread and passing into it pointer to this works fine in development environment, but cause crashes on real system.

EDIT2: Today's workaround - IE tool-bar button IOleCommandTarget::Exec method calls page parsing code. But it requires user interaction.

EDIT3: New workaround - in FinalConstruct I create my own window. If template search fails I create new thread, that sleeps some seconds and sends WM_USER message to that window. Window procedure calls page parser.


Solution

  • Just to close the issue. Today's solution is to handle most of event that can be fired by IE:

    BEGIN_SINK_MAP(CVIEBHO)
        SINK_ENTRY_EX(1071, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE,   CVIEBHO::OnDocumentComplete)
        SINK_ENTRY_EX(1071, DIID_DWebBrowserEvents2, DISPID_DOWNLOADCOMPLETE,   CVIEBHO::OnDownloadComplete)
        SINK_ENTRY_EX(1071, DIID_DWebBrowserEvents2, DISPID_ONQUIT,             CVIEBHO::OnQuit)
        SINK_ENTRY_EX(1071, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2,    CVIEBHO::BeforeNavigate2)
        SINK_ENTRY_EX(1071, DIID_DWebBrowserEvents2, DISPID_NAVIGATECOMPLETE2,  CVIEBHO::NavigateComplete2)
        SINK_ENTRY_EX(1071, DIID_DWebBrowserEvents2, DISPID_PROPERTYCHANGE,     CVIEBHO::PropertyChange)
        SINK_ENTRY_EX(1071, DIID_DWebBrowserEvents2, DISPID_PROGRESSCHANGE,     CVIEBHO::ProgressChange)
    END_SINK_MAP()
    

    Inside of my code I check against the URL witch type of event may occur for the current page and do parsing inside this event handler.