如何在没有窗口对象的情况下在firefox加载项/扩展中插入jQuery?

如何在没有窗口对象的情况下在firefox加载项/扩展中插入jQuery?,jquery,ajax,firefox-addon,ixmldomelement,Jquery,Ajax,Firefox Addon,Ixmldomelement,当我决定将Chrome扩展移植到Firefox时,我遇到了很大的问题。其中一个问题是jQuery不会将自己安装在“Lib/main.js”文件中。我得到的错误如下: ReferenceError: window is not defined 在Firefox插件的主方法中似乎没有定义window对象 我知道扩展本身不需要提交的窗口对象,因为它不表示html页面。但这使得在我想利用ajax方法和dom元素中的搜索算法时,无法安装jQuery 我尝试过几种方法,但都失败了: 从活动选项卡检索窗口

当我决定将Chrome扩展移植到Firefox时,我遇到了很大的问题。其中一个问题是jQuery不会将自己安装在“Lib/main.js”文件中。我得到的错误如下:

ReferenceError: window is not defined
在Firefox插件的主方法中似乎没有定义window对象

我知道扩展本身不需要提交的窗口对象,因为它不表示html页面。但这使得在我想利用ajax方法和dom元素中的搜索算法时,无法安装jQuery

我尝试过几种方法,但都失败了:

  • 从活动选项卡检索窗口对象(发送窗口元素失败,因为sendMessage()方法是窗口对象的一部分)
  • document.createElement(失败,因为也没有文档对象)
  • 一些随机的东西也失败了

所以我的问题是,有人成功地在Firefox插件的主方法中安装了jQuery吗?

Lib/main.js
不是您必须放置应用程序代码的地方。你可以把初始化代码放在那里。就像我们在chrome的
manifest.json中所做的那样。看看我的firefox扩展。看起来是这样的:

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/
相关

看看我的插件的文件夹结构。我记不清了,但您可能需要包含api UTIL


我发现使用Firefox的SDK很有帮助。

我对你的答案不太满意。我正在寻找一种在后台以定义的间隔执行代码的方法,在这种间隔中,我可以执行ajax请求,但不需要窗口。但是Firefox似乎不支持这一点。看看我在答案中给出的代码。在最后一行中,查看我是如何传递数据URL数组的。我正在加载jquery、bootstrap和我的自定义
queryaver.js
。所有这些文件都位于数据文件夹中。我想您可以从那里访问窗口对象,因为如果不在那里,jquery将永远不会加载。是否允许您从那里发出
XMLHttpRequest
还有一件事。对不起,我说错了。Firefox和Chrome的区别在于Chrome扩展有一个背景页面。这就是我让分机轮询新邮件的位置。现在,为了阅读这些消息,我需要能够使用jQuery。但是我需要在后台页面中有一个窗口对象,以便能够将DOM元素加载到jQuery中。您现在向我展示的是如何在满足所需模式时将脚本添加到选项卡中。当然,这里有一个窗口对象。所以,这已经对我起作用了,所以这不是问题。