在BHO中从静态方法调用网页上的javascript
我正在为InternetExplorer编写一个Browser Helper对象,我需要从“静态”(或“全局”)回调方法调用所有打开的浏览器实例上的javascript方法 我遇到的问题肯定与COM中的多线程有关。我的问题是:在BHO中从静态方法调用网页上的javascript,javascript,multithreading,com,bho,Javascript,Multithreading,Com,Bho,我正在为InternetExplorer编写一个Browser Helper对象,我需要从“静态”(或“全局”)回调方法调用所有打开的浏览器实例上的javascript方法 我遇到的问题肯定与COM中的多线程有关。我的问题是: 每个浏览器都有自己的IWebBrowser2对象,由CComPtr指向。如果我的BHO类中有一个静态回调方法,那么回调将到达哪个线程?它是由IE创建的任何一个BHO线程吗 我试图缓存在每个BHO中创建的所有IWebBrowser2指针,然后从静态方法访问它们。然而,我认为
IWebBrowser2
对象,由CComPtr
指向。如果我的BHO类中有一个静态回调方法,那么回调将到达哪个线程?它是由IE创建的任何一个BHO线程吗IWebBrowser2
指针,然后从静态方法访问它们。然而,我认为这涉及到(联合国)编组的一些问题。这样行吗?有什么好的/不同的方法的建议吗1
的答案取决于您为BHO指定的线程模型。如果将ThreadingModel
指定为单元
,COM将把对对象(每个iexplore.exe进程内)的所有调用封送到同一线程。如果将ThreadingModel
指定为Free
或两者都指定为Free
,则可以在任何线程上访问对象
2
的答案是肯定的,它会起作用。通常,从您喜欢的任何线程调用COM方法都是安全的,因为每个对象在注册时都会公布其线程模型,COM本身负责处理因此必须发生的任何封送
您可能会发现有关COM线程模型的文章的以下链接很有趣:
对1
的回答取决于您为BHO指定的线程模型。如果将ThreadingModel
指定为单元
,COM将把对对象(每个iexplore.exe进程内)的所有调用封送到同一线程。如果将ThreadingModel
指定为Free
或两者都指定为Free
,则可以在任何线程上访问对象
2
的答案是肯定的,它会起作用。通常,从您喜欢的任何线程调用COM方法都是安全的,因为每个对象在注册时都会公布其线程模型,COM本身负责处理因此必须发生的任何封送
您可能会发现有关COM线程模型的文章的以下链接很有趣:
使用GlobalInterfaceTable跨线程访问对象。使用GlobalInterfaceTable跨线程访问对象