我已经在网页上成功运行NPRuntime插件,方法是将其复制到firefox插件目录。我想用它创建一个firefox扩展,所以我创建了一个小扩展,在状态栏上显示一个文本框和一个按钮,按钮点击调用一个javascript函数,它从文本框获取值并作为参数传递给NpRuntime插件中的函数,这是嵌入XUL。
但是当我尝试调用该函数时,我得到了Javascript异常,因为该变量为null。
try{
var myplugin=document.getElementById("myplugin");
myplugin.test(document.getElementById("txtUri").value);// calling function
}catch(e){
alert(e.message); //throws the error as myplugin is null
}
当我删除函数调用时没有错误因此嵌入标记被javascript识别。我在firefox插件目录中保留了一个插件dll。 我还尝试在扩展根目录下创建一个插件目录并保留我的dll,但它没有成功。
请帮助我开始,
感谢
答案 0 :(得分:1)
“它嵌入在XUL中”
如何?我打赌你用< embed>在XUL命名空间中,它没有任何特殊含义。
你应该define the HTML namespace and use the embed tag in the html namespace。
当我删除函数调用时没有错误,因此嵌入标记被javascript识别。
这是错误的。如果删除函数调用,则没有代码可以失败 - getElementById永远不会抛出(至少在这种简单的情况下不会抛出)。这并不表示您的XUL代码没问题。
我还尝试在扩展根目录下创建一个插件目录并保留我的dll,但它没有成功。
那是definitely supposed to work。你能把XPI用于演示问题吗?
答案 1 :(得分:0)
从Firefox扩展调用NPAPI插件很棘手。一个看起来有点像黑客的选择是将插件实际注入到代表浏览器UI的DOM中。
更好的选择是在页面加载到浏览器时修改页面的DOM:
Scriptable NPAPI plugin doesn't work with Firefox
或者你可以完全跳过NPAPI插件,并使用js-ctypes:
Using a plugin generated with Firebreath in a Firefox Extension?