我正在尝试在Mac上为chrome制作一个NPAPI插件。我已经编写了一个基本的npapi插件和一个基本的manifest.json
和background.html
来加载它。我的background.html
有一个embed
标记,可以通过Mimetype获取插件。
现在当我从Chrome加载解压缩的扩展程序并尝试调试c ++代码(在xcode4中)时,我发现函数按以下顺序调用:
NP_Initialize
NP_GetEntryPoints
NPP_New
NPP_Destroy
在此之后,当我点击扩展图标时,popup.html
应该被执行。我的popup.html
有以下几行:
第1行:
var pluginObj = document.getElementById("pluginId");
第2行:
pluginObj.Myfunction();
但是在第1行,NP_Getvalue()
函数没有被调用,因此没有实例化“可编写脚本的NPObject”。在第2行,Chrome JavaScript控制台说:
Error in event handler for 'undefined': Object #<HTMLEmbedElement> has no method 'Myfunction' TypeError: Object #<HTMLEmbedElement> has no method 'Myfunction'
为什么在NPP_Destroy
之后立即调用NPP_New function
函数?
答案 0 :(得分:4)
您是否在插件中完成了绘图和事件模型协商?从Chrome 22 for Mac开始,不再支持长期弃用的QuickDraw和Carbon模型,如果您的插件没有协商现代模型,它将在init之后被销毁。有关执行此操作的示例代码,请参阅here。
(是的,很遗憾32位插件的默认模型是旧的,不推荐使用的模型,但由于所有现有的插件都有旧的行为,因此无法在规范中对其进行更改。)