是否可以从不同的线程调用JS函数?

时间:2011-04-28 22:50:29

标签: javascript c++ multithreading internet-explorer com

我正在尝试使用JS window.external通过本机代码主机(C ++)使2个不同的浏览器相互通信。

语法类似于:

在destination.js上:

window.external.register("dest", eventCallbak);  
function eventCallback(senderID, data) {  
    alert("message recieved from " + senderID + " with data of " + data);  
}

on source.js:

window.external.sendMsg("source", "dest", "Hello dest! this is source...");

我设法通过保存eventCallback参数同步执行此操作,将其保存为IDispatch并在询问时调用它(所有在同一个线程中)。没问题。

在尝试异步执行时会出现问题,这意味着 - 在一个线程上将eventCallback保存为IDispatch,稍后在另一个线程中调用它会导致调用方法失败并显示{{ 1 {} HRESULT

有什么想法吗?

感谢,

1 个答案:

答案 0 :(得分:2)

两个浏览器实例使用不同的JS VM实例。 通常,您无法从一个VM /堆中获取一个对象并将其传递给另一个VM /堆。

所以你需要在这里发明一些编组。