Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在BHO中从静态方法调用网页上的javascript_Javascript_Multithreading_Com_Bho - Fatal编程技术网

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

在BHO中从静态方法调用网页上的javascript,javascript,multithreading,com,bho,Javascript,Multithreading,Com,Bho,我正在为InternetExplorer编写一个Browser Helper对象,我需要从“静态”(或“全局”)回调方法调用所有打开的浏览器实例上的javascript方法 我遇到的问题肯定与COM中的多线程有关。我的问题是: 每个浏览器都有自己的IWebBrowser2对象,由CComPtr指向。如果我的BHO类中有一个静态回调方法,那么回调将到达哪个线程?它是由IE创建的任何一个BHO线程吗 我试图缓存在每个BHO中创建的所有IWebBrowser2指针,然后从静态方法访问它们。然而,我认为

我正在为InternetExplorer编写一个Browser Helper对象,我需要从“静态”(或“全局”)回调方法调用所有打开的浏览器实例上的javascript方法

我遇到的问题肯定与COM中的多线程有关。我的问题是:

  • 每个浏览器都有自己的
    IWebBrowser2
    对象,由
    CComPtr
    指向。如果我的BHO类中有一个静态回调方法,那么回调将到达哪个线程?它是由IE创建的任何一个BHO线程吗

  • 我试图缓存在每个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跨线程访问对象