gpt4 book ai didi

c++ - 无法使用 npapi 获取 DOM 窗口

转载 作者:行者123 更新时间:2023-11-28 07:57:19 25 4
gpt4 key购买 nike

我制作了一个简单的 NPRuntime 插件,它在加载时调用 Javascript 函数。基于示例是 seamonkey 的,它在 Google Chrome 上运行良好,但在 FireFox 上运行不正常。

我跟踪代码以找出问题所在,并找到了这一行。

NPObject* window;
NPError err = NPN_GetValue(pNPP, NPNVWindowNPObject, &window);
if (!window)
_log("Can not get DOM window %d", err);

错误返回 NPERR_INVALID_PARAM。

我猜这个简单的例子可能适用于旧版本的 Firefox ... 12.0? 13.0? (我不确定)现在我使用的是最新版本的 FireFox 15.0。

我们将不胜感激。

最佳答案

所以看起来你真正的问题是关于如何从另一个线程调用 javascript 东西,因为你不能从其他线程进行 NPN_ 调用。简短的回答是你不能;更长、更复杂的答案是,这很痛苦,但可以做到。

NPAPI 有一个函数叫做 NPN_PluginThreadAsyncCall .它接受两个参数;第一个是返回 void 并接受 void* 的函数指针,第二个是将传递给该函数的 void*。您可以从任何线程调用此函数,它会导致您的回调“很快”在主线程上被回调。

诀窍是确保您的 void* 为您提供所有您需要的数据,以便返回到该调用期间您需要访问的任何内容。如果您需要的话,更大的技巧是使它看起来同步。第一个可以通过指导来完成,并确保你自己清理干净;第二个可以用互斥量和信号来完成,如果你聪明的话。

这是一件棘手且困难的事情。如果可以,您可以考虑使用 FireBreath因为它为你做了所有这些。特别是因为 FireBreath 有针对不支持 NPN_PluginThreadAsyncCall 的各种随机浏览器的解决方法(例如某些版本的 Opera 和 Safari 5.1 及更高版本)。

关于c++ - 无法使用 npapi 获取 DOM 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12417448/

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