我正在尝试使用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
。
有什么想法吗?
感谢,
答案 0 :(得分:2)
两个浏览器实例使用不同的JS VM实例。 通常,您无法从一个VM /堆中获取一个对象并将其传递给另一个VM /堆。
所以你需要在这里发明一些编组。