我正在开发一个 BHO
并且需要在 OnDocumentComplete
事件上处理页面内容。
但是我发现了一个问题——那一刻没有页面内容,因为它是由JavaScript
稍后生成的。
我试图通过使用 Navigate 方法和必须调用我的 JavaScript 函数来调用自己,但没有成功。 我用关键字搜索了 bho , internet-explorer , 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,并在该事件处理程序中进行解析。
关于javascript - 在 BHO 中处理 JavaScript 生成的页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26865847/