将NPAPI插件移植到WebExtension

时间:2017-11-06 13:10:03

标签: printing npapi firefox-webextensions

我有一个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

该插件与旧版斑马打印机交互以打印图像。

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

1 个答案:

答案 0 :(得分:2)

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

在WebExtension模型中不再可能。最接近的替代方法是Native Messaging - 浏览器不是加载DLL而是启动本机主机进程,并通过STDIO将格式化的消息转发给它。

所以从理论上讲,架构就是这样的:

  1. 您编写了一个本机主机&#34;包装器&#34;,它加载DLL并调用其方法,并准备使用Native Messaging协议与Chrome通信。

  2. 您编写了一个扩展程序,其背景页面与本机主机进行通信。

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

  4. 所以:

    页面→已注入myprinter→内容脚本→后台脚本→本机主机&#34;包装器&#34; →DLL→打印机