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

Posted

技术标签:

【中文标题】如何从 html 按钮调用 Firefox 扩展中的函数【英文标题】:how to call a function in Firefox extension from a html button 【发布时间】:2011-01-02 07:54:57 【问题描述】:

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

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

【问题讨论】:

当我尝试写入扩展名内的 xml 文件时出现此错误:错误: 获取属性 XPCComponents.classes 的权限被拒绝知道如何解决这个问题吗? 你指的是 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

您的 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。

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

【讨论】:

tl;dr :) 这似乎是原始问题的过度杀伤力,请参阅我的答案。【参考方案3】:

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

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

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

【讨论】:

以上是关于如何从 html 按钮调用 Firefox 扩展中的函数的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 Firefox 扩展弹出窗口中显示的滚动条

如何在 Firefox 12 HTML 5 视频中隐藏播放按钮

从 iframe 访问 Firefox 扩展程序

Firefox Extension API - permissions.request只能从用户输入处理程序调用?

Firefox 3.x 扩展:对话框“另存为”-选择开启器,如何打开?

如何以静默模式安装firefox插件?