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

时间:2010-01-07 02:04:18

标签: firefox-addon htmlbutton

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

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

3 个答案:

答案 0 :(得分:7)

由于您控制网页,最简单,最安全的方法就是在网页中调度自定义DOM事件并在扩展代码中收听:

https://developer.mozilla.org/En/Code_snippets/Interaction_between_privileged_and_non-privileged_pages

这是我编写的一个示例扩展,它完全符合http://mozilla.doslash.org/cw/(未更新到最新的Firefox版本,但它很干净,应该很容易更新)。

答案 1 :(得分:5)

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

但是,您可以设计扩展名以允许从HTML进行访问。 HTML Javascript通常不允许访问Component对象,因此您需要允许HTML代码获取扩展中的对象。为此,请在扩展中创建XPCOM组件,并通过nsICategoryManager对象在“JavaScript全局属性”类别中设置对象。条目名称是从非特权Javascript使用的字符串,该值是XPCOM类的合同ID。

但是,您还需要允许对您的对象进行无特权的Javascript访问,否则脚本安全管理器将阻止访问。为此,实现nsISecurityCheckedComponent - 提供canCreateWrapper(在nsIIDPtr iid中),canCallMethod(在nsIIDPtr iid中,在wstring methodName中),canGetProperty(在nsIIDPtr iid中,在wstring propertyName中)和canSetProperty(在nsIIDPtr iid中,在wstring propertyName中)以返回allAccess对于允许的属性,否则为noAccess。

小心你对用户输入所做的事情,以及你允许访问的内容 - 很容易在浏览器中意外地创建一个安全漏洞。

答案 2 :(得分:1)

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

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

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