我在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并启用它。没有运气。
任何可能出错的线索?
答案 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');
我仍然没有弄清楚为什么会出现这个问题,但这种解决办法确实可以解决问题。