将 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。
所以理论上,架构应该是这样的:
您编写了一个本机主机 "wrapper",它加载 DLL 并调用其方法,并准备好使用本机消息协议与 Chrome 交谈。
您编写了一个带有与本机主机对话的后台页面的扩展程序。
您编写一个内容脚本,使用相同的公开方法将 myprinter
对象注入页面的命名空间,并将请求中继到后台页面。
所以:
页面 → 已注入 myprinter
→ 内容脚本 → 后台脚本 → 本机主机 "wrapper" → DLL → 打印机
我有一个 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。
所以理论上,架构应该是这样的:
您编写了一个本机主机 "wrapper",它加载 DLL 并调用其方法,并准备好使用本机消息协议与 Chrome 交谈。
您编写了一个带有与本机主机对话的后台页面的扩展程序。
您编写一个内容脚本,使用相同的公开方法将
myprinter
对象注入页面的命名空间,并将请求中继到后台页面。
所以:
页面 → 已注入 myprinter
→ 内容脚本 → 后台脚本 → 本机主机 "wrapper" → DLL → 打印机