![](/img/trans.png)
[英]Porting XPCOM Firefox extension to Chrome extension with NPAPI plugin
[英]Invoking NPAPI plugin functionality from Firefox extension
我已经编写了一个NPAPI插件,该插件实现了所需的所有逻辑,现在我正在编写一个扩展程序,该扩展程序应使用该插件中提供的功能。 这种架构为我提供了为Mozilla Firefox和Google Chrome编写相同的C ++代码的机会。
在Chrome中,我通过将<embed ...>
结构写入扩展名所拥有的单独文档中来实例化插件中定义的对象(它自动提供给Chrome插件)。 那行得通。 在C ++代码中,我执行了插件对象的构造函数中所需的所有工作。
我无法轻松地使解决方案适应Firefox中的使用,因为该扩展名没有任何单独的文档支持,并且该扩展名没有写任何已经呈现的文档的权限。
最常见的形式是我的主要问题是如何多次使用插件提供的功能,并在用户单击按钮或在下拉菜单中选择我的条目时将参数列表传递给本机函数(即使用参数应在特定事件之后而不是仅在任意时间调用)?
“补充”问题是:
如何在Mozilla Firefox中实例化插件? 我在哪里可以得到FF“解释”的文档,以便该扩展名可以写入该文档?
我自己不知道该怎么做,但这是一个开源的Firefox扩展,可以做到这一点: https : //github.com/kylehuff/webpg-firefox
您的Firefox扩展程序需要使用“ 浏览器覆盖 ”。 对于浏览器的各个部分,有多种类型的叠加层,它们会在chrome.manifest文件中定义的指定文档内加载(叠加)。
例如,以下内容将覆盖层应用于“ browser.xul”文件(这是浏览器主窗口)
overlay chrome://browser/content/browser.xul content/firefoxOverlay.xul
现在,在该覆盖文件中,您可以加载插件对象并调用插件提供的方法。
这是一个示例XUL文件,除了加载内容类型为“ application / x-example-plugin”的NPAPI插件,并将该插件对象分配给变量“ myPlugin”外,它没有做其他事情
<script type="text/javascript">
myPlugin = document.getElementById("myPlugin");
</script>
<?xml version="1.0" encoding="UTF-8"?>
<overlay id="myOverlay" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="text/javascript">
myPlugin = document.getElementById("myPlugin");
alert(myPlugin.someFunction());
</scrpit>
<window id="main-window">
<vbox collapsed="true">
<html:object id="myPlugin" type="application/x-example-plugin" height="1" width="1" style="visibility:hidden;"></html:object>
</vbox>
</window>
</overlay>
一些重要的注意事项
<em:unpack>true</em:unpack>
一旦您的叠加层在浏览器XUL的上下文中加载,并且插件在主浏览器窗口中初始化,您就可以在主窗口范围内通过将变量分配给您的变量来引用插件(在此,“ myPlugin”例)。
我不会在这里深入了解如何获取主窗口的上下文(请参阅下面的链接),但是一旦有了引用,就可以从内容脚本,侧边栏,工具栏等中调用公开的方法。
参考链接-
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.