jquery - 如何在没有 Window 对象的情况下在 Firefox 附加组件/扩展中插入 jQuery?

标签 jquery ajax firefox-addon ixmldomelement

当我决定将 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/

相关文章:

jquery - 使用复选框和 jQuery 禁用/启用元素?

php - 在 SQL 语句/查询中使用 jQuery 变量

asp.net - 覆盖 ASP.NET AJAX 控件工具包的 TabContainer 控件中的默认 CSS

javascript - 在 django 模板 URL 标签中传递参数

javascript - WebExtensions 是否有等同于 nsIBrowserSearchService 的工具?

javascript - 使用selects和jQuery计算价格无法正常工作

jquery - 在 jQuery 中,对所有选择器使用 [name=X] 是一个坏主意吗?

jquery - 为什么我的列表没有在 Jquery 中附加列表项?

javascript - 浏览器扩展(例如 “memonic”)如何将数据与特定用户相关联?

javascript - 火狐扩展 : Access the DOM Before It's Loaded