在BHO中处理JavaScript生成的页面
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在BHO中处理JavaScript生成的页面相关的知识,希望对你有一定的参考价值。
我正在开发一个BHO
,需要在OnDocumentComplete
事件上处理页面内容。但我发现了一个问题 - 当时没有页面内容,因为它后来由javascript
生成。
我试图通过使用必须给我打电话的JavaScript函数的Navigate方法来调用自己,但没有任何成功。我通过关键词bho,internet-explorer,javascript进行了搜索,结果没有找到任何结果。
感谢您的任何建议。
编辑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生成的页面的主要内容,如果未能解决你的问题,请参考以下文章
如何用普通 C++ 编写一个执行我的 javascript 的 IE BHO