我编写了一个NPAPI插件,它实现了所需的所有逻辑,现在我正在编写一个预期使用插件中提供的功能的扩展。这种架构让我有机会为Mozilla Firefox和Google Chrome编写相同的C ++代码。
在Chrome中,我通过将<embed ...>
构造写入我的扩展程序所拥有的单独文档(它是自动提供给我的Chrome插件)来实例化插件中定义的对象。这才有效。在C ++代码中,我执行插件对象的构造函数中所需的所有工作。
我无法轻松调整我的解决方案以在Firefox中使用它,因为扩展程序不受任何单独文档的支持,并且我的扩展程序无权写入任何已呈现的文档。
我最常见的主要问题是如何多次使用插件提供的功能,并在用户点击按钮或在下拉菜单中选择我的条目时将参数列表传递给我的本机函数(即应该在特定事件之后调用带参数的方法,而不仅仅是在任意时间)?
“补充”问题是:
如何在Mozilla Firefox中实例化插件?我在哪里可以获得一个由FF“解释”的文档,以便扩展程序可以写入它?
答案 0 :(得分:1)
我不知道自己该怎么做,但这是一个开源的firefox扩展程序:https://github.com/kylehuff/webpg-firefox
答案 1 :(得分:0)
您的Firefox扩展程序需要使用“browser overlay”。对于浏览器的各个部分,有多种类型的叠加层,它们在指定文档中加载(覆盖),如chrome.manifest文件中所定义。
例如,以下内容将overlay应用于“browser.xul”文件(这是主浏览器窗口)
overlay chrome://browser/content/browser.xul content/firefoxOverlay.xul
现在,在overlay文件中,您可以加载插件对象并调用插件提供的方法。
这是一个示例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” “在这个例子中。”
我不会深入探讨如何获取main window的上下文(请参阅下面的链接),但是一旦有了引用,就可以从content scripts, sidebars, toolbars中调用公开的方法等等。
参考链接 -