在BHO中处理JavaScript生成的页面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在BHO中处理JavaScript生成的页面相关的知识,希望对你有一定的参考价值。

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

我试图通过使用必须给我打电话的JavaScript函数的Navigate方法来调用自己,但没有任何成功。我通过关键词进行了搜索,结果没有找到任何结果。

感谢您的任何建议。

编辑1:创建一个新的线程并传入它的指针this在开发环境中工作正常,但导致真正的系统崩溃。

EDIT2:今天的解决方法 - 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女巫类型,并在此事件处理程序中进行解析。

以上是关于在BHO中处理JavaScript生成的页面的主要内容,如果未能解决你的问题,请参考以下文章

BHO:onload 完成执行时收到通知

如何用普通 C++ 编写一个执行我的 javascript 的 IE BHO

IE BHO - 为页面加载调用 DISPID_FILEDOWNLOAD?

利用BHO实现浏览器劫持

IE中BHO插件被修改...该如何解决

在 HTML 页面中包含隐藏数据以供 javascript 处理