当我决定将 Chrome 扩展程序移植到 Firefox 时,我遇到了重大问题。问题之一是 jQuery 不会将自身安装在“Lib/main.js”文件中。我得到的错误如下:
ReferenceError: window is not defined
看来 window 对象没有在 Firefox 附加组件的 main 方法中定义。
我知道扩展本身不需要提交的窗口对象,因为它不代表 html 页面。但这使得我无法安装 jQuery,而我想在 dom 元素中利用 ajax 方法和搜索算法。
我尝试了几种方法,但都失败了:
- 从事件选项卡中检索窗口对象(无法发送窗口元素,因为 sendMessage() 方法是窗口对象的一部分)
- document.createElement(失败,因为也没有文档对象)
- 一些随机的东西也失败了
所以我的问题是,有人在 Firefox 插件的 main 方法中成功安装了 jQuery 吗?
最佳答案
Lib/main.js
不是您必须放置应用程序代码的位置。您可以在那里放置初始化代码。就像我们在 chrome 的 manifest.json
中所做的那样。看看我的 Firefox 扩展的 main.js
。它看起来像这样:
exports.main = function() {};
var { MatchPattern } = require("match-pattern");
var pageMod = require("page-mod");
var data = require("self").data;
pageMod.PageMod({
include: [/.*phpminiadmin.*/, /.*phpmyadmin.*/, /.*devadmin.*/],
contentScriptWhen: 'ready',
contentScriptFile: [data.url('jquery-1.7.2.min.js'),data.url('jquery-ui-1.8.20.custom.min.js'),data.url('bootstrap.min.js'),data.url('querysaver.js')]
});
正是 pageMod
允许您在页面上下文中加载 javascript,当然,页面上下文位于与页面自身上下文不同的独立世界中。
您希望加载的脚本应驻留在 ../data
中(相对于 lib/
)。
看看我的插件的文件夹结构。 https://github.com/juzerali/Don-t-lose-your-query/tree/master/Firefox-Addon 。我记错了,但您可能需要包含 api-utils。
我发现使用 Firefox 的 SDK 很有帮助。
关于jquery - 如何在没有 Window 对象的情况下在 Firefox 附加组件/扩展中插入 jQuery?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14941424/