Javascript IHTMLDOMNode::appendChid()赢了';I don’我并不总是像预期的那样工作 我在C++中写了一个BHO,它基本上包含两个阶段:

Javascript IHTMLDOMNode::appendChid()赢了';I don’我并不总是像预期的那样工作 我在C++中写了一个BHO,它基本上包含两个阶段:,javascript,internet-explorer,com,code-injection,bho,Javascript,Internet Explorer,Com,Code Injection,Bho,第1阶段:从BHO打开新窗口并导航到一个网站URL(从BHO),一旦DISPID_DOCUMENTCOMPLETE事件触发相应的URL,将一些Javascript代码注入其文档,然后从js调用一些代码。然后js引擎将处理更多的代码,并最终通过window.location.href将其窗口指向其他URL 第2阶段:一旦BHO内部为新URL触发DISPID_DOCUMENTCOMPLETE,流程将按照相同的路线进行:注入脚本等。这就是我遇到麻烦的地方 发生在WIN7 32位+IE11上,不会发生在

第1阶段:从BHO打开新窗口并导航到一个网站URL(从BHO),一旦DISPID_DOCUMENTCOMPLETE事件触发相应的URL,将一些Javascript代码注入其文档,然后从js调用一些代码。然后js引擎将处理更多的代码,并最终通过
window.location.href
将其窗口指向其他URL

第2阶段:一旦BHO内部为新URL触发DISPID_DOCUMENTCOMPLETE,流程将按照相同的路线进行:注入脚本等。这就是我遇到麻烦的地方

  • 发生在WIN7 32位+IE11上,不会发生在WINXP 32位+IE8上
  • 问题在于第2阶段-注入失败。我尝试在第一个body标签和第一个head标签上附加child,结果相同
  • 有针对所有涉及的HRESULT返回值的测试,也有针对返回的接口指针的有效性的测试,它们都通过了测试
  • 但是,当从脚本调用函数时,GetIDsOfNames()从javascript代码中传递我的函数名时,会返回一个hresult-2147352570(未知名称)
  • 检查IE中的DOM会发现没有注入js代码
  • 这通常发生在IE启动后,不再出现鼠标点击或键盘事件。然而,只有在IE启动并点击的情况下(在任何地方——桌面、标题栏、任何窗口的客户端区域),才会发生这种情况
  • 尝试修复此问题:使用SendInput()模拟鼠标单击。如上文第6点所述工作。在第二个URL DISPID_DOCUMENTCOMPLETE事件上使用了一个计时器,并在几秒钟后继续注入-这会在调用IHTMLDocument2::createElement()时使浏览器崩溃

    这种奇怪的行为有什么原因,也许有什么办法可以解决?
    谢谢

    看起来我必须更新IWebbrowser2实例-它会在页面导航时更改。通过查询与DISPID\u DOCUMENTCOMPLETE事件一起发送的第二个参数来获取新的接口指针

    链接到它: