gpt4 book ai didi

javascript - 从BHO中的静态方法调用网页上的javascript

转载 作者:行者123 更新时间:2023-11-28 02:57:04 24 4
gpt4 key购买 nike

我正在为 Internet Explorer 编写一个浏览器帮助程序对象,我需要通过“静态”(或“全局”)回调方法在所有打开的浏览器实例上调用 javascript 方法。

我遇到了一些问题,我确信这些问题与 COM 中的多线程相关。我的问题是:

  1. 每个浏览器都有自己的 IWebBrowser2 CComPtr<IWebBrowser2> 指向的对象。如果我的 BHO 类中有一个静态回调方法,该回调将到达哪个线程?它会是 IE 创建的 BHO 线程之一吗?

  2. 我尝试缓存所有 IWebBrowser2在每个 BHO 中创建的指针,并稍后从静态方法访问它们。但是,我认为涉及一些(取消)编码问题。这行得通吗?关于执行此操作的好/不同方法有什么建议吗?

最佳答案

1 的答案取决于您为 BHO 指定的线程模型。如果将 ThreadingModel 指定为 Apartment,COM 将对对象(在每个 iexplore.exe 进程内)的所有调用编码(marshal)到同一线程。如果将 ThreadingModel 指定为 FreeBoth,则可以在任何线程上访问您的对象。

2 的答案是肯定的,它会起作用。从您喜欢的任何线程调用 COM 方法通常是安全的,因为每个对象在注册时都会通告其线程模型,然后 COM 本身负责处理因此而必须发生的任何编码。

您可能会发现以下有关 COM 线程模型的文章链接很有趣:

关于javascript - 从BHO中的静态方法调用网页上的javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2351041/

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