jQuery停止了Greasemonkey脚本的工作

时间:2014-09-17 14:28:02

标签: jquery firefox greasemonkey

我在Firefox 32上启用了几个greasemonkey脚本。结果其中一个停止工作(没有我改变任何东西)。经过仔细检查,似乎普通的旧javascript代码运行得很好,而jQuery代码却没有。

我通过@require命令引用jQuery库。谷歌提出了一个无休止的帖子列表,提到@require是错误的并且不刷新脚本。但是,我没有发现与该bug相关的问题,因为这不是一个新脚本。

我不确定,但Firefox和Greasemonkey可能都已更新并导致问题。

这是一个最小的测试用例:

// ==UserScript==
// @name        Test
// @namespace   asd
// @include     http://a.certain.website.com/*
// @version     1
// @grant       none

// ==/UserScript==
// @require       http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js

alert('Alert 1');

this.$ = this.jQuery = jQuery.noConflict(true);

$(document) .ready(function () {
    alert('Alert 2');
});

警报1总是出现,而其他对话框似乎从未被调用过。

Greasemonkey让我回顾@grant command,所以我今天就补充说。也没用。我也添加了这个。$ line和我也没有成功。

我还安装了最新版本的Greasemoney(2.2)。禁用它,重新启动Firefox并启用它。没有运气。

任何可能出错的线索?

1 个答案:

答案 0 :(得分:2)

尽管这实际上不是问题的解决方案,而是一种解决方法,但我决定发布这个。

似乎jQuery没有加载,所以我继续manually added a script tag。我删除了ready()回调,脚本最终看起来像:

// ==UserScript==
// @name        Test
// @namespace   asd
// @include     http://some.domain.com/*
// @version     1
// @grant       none

// ==/UserScript==
var my_awesome_script = document.createElement('script');

my_awesome_script.setAttribute('src','http://url.to/jquery.js');

document.head.appendChild(my_awesome_script);

// Add jQuery code here
$('#someid').val('test');

我仍然没有弄清楚为什么会出现这个问题,但这种解决办法确实可以解决问题。