Firefox addon 如何从html按钮调用Firefox扩展中的函数

Firefox addon 如何从html按钮调用Firefox扩展中的函数,firefox-addon,htmlbutton,Firefox Addon,Htmlbutton,如何使用网页中的html按钮调用扩展名中声明的Javascript函数 我有一个html页面,里面有一个按钮。当用户单击按钮时,它将调用我在自己的firefox扩展中已声明的函数。您的firefox扩展在与HTML页面不同的Javascript上下文中运行,因此无法从HTML页面中的Javascript直接调用扩展 但是,您可以将扩展设计为允许从HTML访问。HTML Javascript通常不允许访问组件对象,因此您需要允许HTML代码以某种方式访问扩展中的对象。为此,在扩展中创建一个XPCO

如何使用网页中的html按钮调用扩展名中声明的Javascript函数


我有一个html页面,里面有一个按钮。当用户单击按钮时,它将调用我在自己的firefox扩展中已声明的函数。

您的firefox扩展在与HTML页面不同的Javascript上下文中运行,因此无法从HTML页面中的Javascript直接调用扩展

但是,您可以将扩展设计为允许从HTML访问。HTML Javascript通常不允许访问组件对象,因此您需要允许HTML代码以某种方式访问扩展中的对象。为此,在扩展中创建一个XPCOM组件,并通过NSCategoryManager对象将对象设置为“JavaScript全局属性”类别。条目名称是来自非特权Javascript的字符串,值是XPCOM类的合同ID

但是,您还需要允许对对象的非特权Javascript访问,否则脚本安全管理器将阻止访问。要实现这一点,请实现nsISecurityCheckedComponent-提供canCreateWrapper(在nsidptr iid中)、canCallMethod(在nsidptr iid中,在wstring methodName中)、canGetProperty(在nsidptr iid中,在wstring propertyName中)以返回允许属性的allAccess,否则不返回Access


小心用户输入的操作和允许访问的内容-这样做很容易在浏览器中意外创建安全漏洞。

由于您控制网页,因此最简单、最安全的方法是在网页中发送自定义DOM事件,并在扩展代码中侦听它:


下面是我编写的一个扩展示例,它正好做到了这一点(虽然没有更新到最新的Firefox版本,但它很干净,应该很容易更新)。

尝试将其放在尝试访问本地文件的javascript函数的开头:

netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

这将使用户可以选择是否允许您的代码访问本地文件系统。

我在尝试写入扩展名内的xml文件时遇到此错误:错误:获取属性XPCComponents.classes的权限被拒绝。您知道如何解决此问题吗?您指的是元素还是元素。这可能不会改变我的答案,但首先需要一些澄清;博士:)这似乎是对原始问题的过度解释,请看我的答案。