gpt4 book ai didi

javascript - IHTMLDOMNode::appendChid() 并不总是按预期工作

转载 作者:行者123 更新时间:2023-11-28 00:09:18 28 4
gpt4 key购买 nike

我正在用 C++ 编写 BHO,它基本上涉及两个阶段。

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

第 2 阶段:一旦 DISPID_DOCUMENTCOMPLETE 在新 URL 的 BHO 内触发,流程就会遵循相同的路线:注入(inject)脚本等。这就是我遇到麻烦的地方。

  1. 发生在 Win 7 32 位 + IE11 上,不会发生在 Win XP 32 位 + IE8 上
  2. 问题出在第 2 阶段 - 注入(inject)失败。我尝试在第一个 body 标签和第一个 head 标签上添加appendChild,结果相同。
  3. 对所有涉及的 HRESULT 返回值以及返回的接口(interface)指针的有效性进行了测试,并且都通过了
  4. 但是,当需要从脚本调用函数时,GetIDsOfNames() 在从 JavaScript 代码传递函数名称时会返回 -2147352570(未知名称)的 hresult。
  5. 在 IE 中检查 DOM,发现 js 代码未注入(inject)
  6. 当 IE 启动并且不再发生鼠标单击或键盘事件时,总是会发生这种情况。然而,只有大约 5% 或更少的情况发生,即启动 IE 并发生单击(任何位置 - 桌面、标题栏、任何窗口的客户区)。

尝试解决此问题:使用 SendInput() 来模拟鼠标单击。工作原理如上面第 6 点所述。使用在第二个 URL DISPID_DOCUMENTCOMPLETE 事件上触发的计时器,并在几秒钟后继续注入(inject) - 当调用 IHTMLDocument2::createElement() 时,浏览器会崩溃。

这种奇怪行为的任何原因以及解决方法?谢谢!

最佳答案

看起来我必须更新 IWebbrowser2 实例 - 它会在页面导航时发生变化。通过查询随 DISPID_DOCUMENTCOMPLETE 事件一起发送的第二个参数来获取新的接口(interface)指针。

链接:https://msdn.microsoft.com/en-us/library/aa768282%28v=vs.85%29.aspx

关于javascript - IHTMLDOMNode::appendChid() 并不总是按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31046887/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com