Greasemonkey @require jQuery不工作“组件不可用”

时间:2010-01-16 14:56:01

标签: javascript jquery firefox-addon greasemonkey

我见过the other question on here关于在Greasemonkey中加载jQuery的问题。尝试过该方法后,在==UserScript==标记中使用此require语句:

// @require    http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js

我仍然在Firefox的错误控制台中收到以下错误消息:

Error: Component is not available
Source File: file:///Users/greg/Library/Application%20Support/
       Firefox/Profiles/xo9xhovo.default/gm_scripts/myscript/jquerymin.js
Line: 36

这会阻止我的greasemonkey代码运行。我确保在jQuery中包含@require并在安装之前保存了我的js文件,因为只在安装时加载了所需的文件。

代码:

// ==UserScript==
// @name           My Script
// @namespace      http://www.google.com
// @description    My test script
// @include        http://www.google.com
// @require        http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js
// ==/UserScript==

GM_log("Hello");

我的Macbook Pro,Leopard(10.5.8)上的Firefox 3.5.7上安装了Greasemonkey 0.8.20091209.4。我已经清除了缓存(除了cookie)并禁用了除Flashblock 1.5.11.2,Web Developer 1.1.8和Adblock Plus 1.1.3之外的所有其他插件。

我的config.xml安装了我的Greasemonkey脚本:

<UserScriptConfig>
<Script filename="myscript.user.js" name="My Script" 
 namespace="http://www.google.com" description="My test script" enabled="true" 
 basedir="myscript">
    <Include>http://www.google.com</Include>
    <Require filename="jquerymin.js"/>
</Script>

我可以看到jquerymin.js位于gm_scripts/myscript/目录。

此外,在安装Greasemonkey脚本时,控制台中是否会出现此错误?

Error: not well-formed
Source File: file:///Users/Greg/Documents/myscript.user.js
Line: 1, Column: 1
Source Code:
   // ==UserScript==

8 个答案:

答案 0 :(得分:7)

我找到了一种与jQuery 1.4.1一起使用它的非理想方式 - 这似乎解决了这个问题。这是new browser sniffing似乎“打破”它。

的jquery-1.4.1.min.js:

  [old]  36: var o=r.createElement("div");n="on"+n;var m=n in o;
  [new]  36: var o=r.createElement("div");n="on"+n;var m=true;

的jquery-1.4.1.js

  [old] 934: var isSupported = (eventName in el);
  [new] 934: var isSupported = true;

答案 1 :(得分:6)

好的,所以我对此进行了更深入的研究。我完全使用了你的脚本,但使用了我们的JQuery版本,使它看起来像这样:

// ==UserScript==
// @name           My Script
// @namespace      http://www.google.com
// @description    My test script
// @include        http://www.google.se/*
// @include        http://www.dn.se/*
// @require        http://myserver/jquery-1.3.2.js
// ==/UserScript==

GM_log("Hello");

对我来说这很好用,我的猜测,google api上的JQuery缺少一些功能。因为上面的代码,工作正常。另请注意每个网址末尾的/*,请包含该内容。

尝试另一个JQuery并更改网址,它应该是正确的。

答案 2 :(得分:6)

我在试图用GM 0.8和jquery 1.4.2解决这个问题时遇到了磕磕绊绊,发现了这个问题:http://forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error

在我看来,这个问题的确切答案以及如何解决这个问题。解决方法对我有用。

答案 3 :(得分:3)

好消息并更新所有帖子:

以上补丁允许在Greasemonkey脚本中运行1.5.2之前的jQuery版本,但幸运的是,如果使用当前的jQuery 1.5.2版本,则不再需要该补丁。

我检查了它的代码并注意到jQuery中的eventSupported函数代码

var eventSupported = function(eventName) { ... }

已更新,结果是未修补的jQuery 1.5.2现在在Greasemonkey 0.9.2中运行。

答案 4 :(得分:2)

补丁jquery-1.4.3.min.js

  

[old]第41行   u.createElement( “DIV”); S “上的” + S =;无功   B = s in v;
[new] line 41   u.createElement( “DIV”); S “上的” + S =;无功   B =真;

答案 5 :(得分:0)

@ grequire属性在Greasemonkey和jQuery中无法正常工作......同样的错误也可能出现在FireBug中。

另一种方法是通过创建脚本标记,通过Greasemonkey在页面中包含jQuery。 Here's how to do that

答案 6 :(得分:0)

不完全正确,似乎jQuery 1.4尝试使用在greasemonkey环境中无效的调用来检测某些内容。 @require通常可以正常工作。

所以恢复到1.3.2确实可以解决问题,但我宁愿找到一个让我使用1.4的解决方案。

不过,我用这个,略有不同:

// @require http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js

答案 7 :(得分:0)

这是Greasemonkey的jQuery 1.4.4的缩小版本:

http://userscripts.org/scripts/show/92329

希望它有所帮助, 严