在BHO中处理JavaScript生成的页面

Process JavaScript-generated page in BHO

本文关键字:JavaScript BHO 处理      更新时间:2023-09-26

我正在开发一个BHO,需要处理OnDocumentComplete事件的页面内容。但我发现了一个问题——当时没有页面内容,因为它是稍后由JavaScript生成的。

我试图通过使用Navigate方法和必须调用我的JavaScript函数来调用自己,但没有成功。我搜索了关键词bho,互联网浏览器,javascript,没有找到有用的结果。

谢谢你的建议。

第1版:创建一个新线程并将指向this的指针传递给它在开发环境中运行良好,但在实际系统中会导致崩溃。

第2版:今天的解决方法-IE工具栏按钮IOleCommandTarget::Exec方法调用页面解析代码。但它需要用户交互。

第3版:新的解决方法-在FinalConstruct中,我创建了自己的窗口。如果模板搜索失败,我会创建新的线程,它会休眠几秒钟,并向该窗口发送WM_USER消息。窗口过程调用页面分析器。

只是为了解决问题。今天的解决方案是处理大部分可以由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()

在我的代码中,我检查当前页面可能发生的事件类型的URL开关,并在该事件处理程序中进行解析。