1

我正在尝试在 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

在此之后,当我单击扩展图标时,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

4

1 回答 1

4

您是否在插件中完成了绘图和事件模型协商?从 Mac 版 Chrome 22 开始,不再支持已弃用已久的 QuickDraw 和 Carbon 模型,如果您的插件不协商现代模型,它将在初始化后立即销毁。有关执行此操作的示例代码,请参见此处

(是的,不幸的是 32 位插件的默认模型是旧的、已弃用的模型,但由于所有现有插件都期望旧行为,因此无法在规范中更改它。)

于 2012-10-11T09:15:25.453 回答