将 NPAPI 插件移植到 WebExtension

Porting an NPAPI plugin to WebExtension

我有一个 NPAPI 插件可以将 Web 应用程序与打印机集成。我正在寻找一些关于如何将现有 NPAPI 插件移植到新的 WebExtension 标准的资源。

第一个问题是,WebExtension 的限制是什么,所以我会评估它是否可行?

我当前的插件是通过以下方式加载的:

<embed id="myprinter" type="application/mozilla-printer-scriptable-plugin" width=200 height=200>

然后我们可以使用对象公开的方法与插件交互,例如

myprinter.print(), myprinter.clear(), myprinter.render(imageurl)

和属性

myprinter.status, myprinter.retcode

该插件与旧版本的 zebra 打印机交互以打印图像。

我对当前 NPAPI 内部工作原理的了解也很有限,因为当前扩展是由其他开发人员编写的。

NPAPI 模型是一个 DLL 可以加载并直接公开代码。

这在 WebExtension 模型中不再可能。最接近的替代方案是 Native Messaging - 浏览器启动本地主机进程并通过 STDIO 向其中继格式化消息,而不是加载 DLL。

所以理论上,架构应该是这样的:

  1. 您编写了一个本机主机 "wrapper",它加载 DLL 并调用其方法,并准备好使用本机消息协议与 Chrome 交谈。

  2. 您编写了一个带有与本机主机对话的后台页面的扩展程序。

  3. 您编写一个内容脚本,使用相同的公开方法将 myprinter 对象注入页面的命名空间,并将请求中继到后台页面。

所以:

页面 → 已注入 myprinter → 内容脚本 → 后台脚本 → 本机主机 "wrapper" → DLL → 打印机