在npp_new之后立即调用npp_destroy

时间:2012-10-11 06:41:02

标签: macos google-chrome-extension npapi

我正在尝试在Mac上为chrome制作一个NPAPI插件。我已经编写了一个基本的npapi插件和一个基本的manifest.jsonbackground.html来加载它。我的background.html有一个embed标记,可以通过Mimetype获取插件。

现在当我从Chrome加载解压缩的扩展程序并尝试调试c ++代码(在xcode4中)时,我发现函数按以下顺序调用:

  1. NP_Initialize
  2. NP_GetEntryPoints
  3. NPP_New
  4. NPP_Destroy
  5. 在此之后,当我点击扩展图标时,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函数?

1 个答案:

答案 0 :(得分:4)

您是否在插件中完成了绘图和事件模型协商?从Chrome 22 for Mac开始,不再支持长期弃用的QuickDraw和Carbon模型,如果您的插件没有协商现代模型,它将在init之后被销毁。有关执行此操作的示例代码,请参阅here

(是的,很遗憾32位插件的默认模型是旧的,不推荐使用的模型,但由于所有现有的插件都有旧的行为,因此无法在规范中对其进行更改。)