9

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

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

4

3 回答 3

7

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

https://developer.mozilla.org/En/Code_snippets/Interaction_between_privileged_and_non-privileged_pa​​ges

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

于 2010-01-07T22:55:37.397 回答
5

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

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

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

请注意您对用户输入的操作以及您允许访问的内容 - 这样做很容易在浏览器中意外创建安全漏洞。

于 2010-01-07T02:18:01.580 回答
1

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

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

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

于 2010-06-29T19:36:11.997 回答