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

Posted

技术标签:

【中文标题】Greasemonkey @require jQuery 不工作“组件不可用”【英文标题】:Greasemonkey @require jQuery not working "Component not available" 【发布时间】:2010-01-16 14:56:01 【问题描述】:

我已经看到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==

【问题讨论】:

我试过你的脚本,效果很好。这里没问题,使用 Greasemonkey 版本 0.8.20091129.3。您确定在安装新脚本之前正确卸载了以前的脚本。我在 Firefox 中也遇到了缓存问题。 这似乎是几天前刚刚发布的 jquery 1.4 的一个错误。至少,我对 jquery 1.4 有同样的问题,但对 jquery 1.3 没有。 【参考方案1】:

我发现了一种在 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;

【讨论】:

【参考方案2】:

好的,所以我对此进行了更深入的研究。我完全使用了您的脚本,但使用了我们的 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 并更改 URL,它应该可以正常工作。

【讨论】:

谢谢,我将需要的 URL 更改为 jqueryjs.googlecode.com/files/jquery-1.3.2.min.js,它可以工作了!【参考方案3】:

我在尝试用 GM 0.8 和 jquery 1.4.2 处理这个问题时跌跌撞撞地发现:http://forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error

在我看来,它就像是对问题的明确答案以及如何解决它。解决方法对我有用。

【讨论】:

感谢您的链接,这是最终的答案(ichau 也提到了相同的修复,但没有链接)。在我问这个问题的时候,1.4 刚刚发布,我使用的是 1.3.2,Anders 的回答解决了我的问题。 感谢您的链接,为了以防万一,我编辑了我的链接以包含链接。当时没有链接,并从我的脚本中复制了一些 cmets :)【参考方案4】:

好消息和更新所有帖子:

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

我检查了它的代码,发现 jQuery 中的 eventSupported 函数代码

var eventSupported = function(eventName)  ... 

已更新,未打补丁的 jQuery 1.5.2 现在在 Greasemonkey 0.9.2 中运行。

【讨论】:

【参考方案5】:

jquery-1.4.3.min.js 补丁

[旧] 第 41 行 u.createElement("div");s="on"+s;var B=s in v; [新] 第 41 行 u.createElement("div");s="on"+s;var B=真;

【讨论】:

【参考方案6】:

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

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

【讨论】:

谢谢,我已经看到了那个链接——我想知道为什么 @require 是一个记录在案的方法,但对我不起作用。 keyvan.net/2008/10/greasemonkey-jquery 我们将 Greasemonkey 与 JQuery 的 @require 属性一起使用,它对我们来说工作得很好。【参考方案7】:

不完全正确,似乎 jQuery 1.4 尝试使用在greasemonkey 环境中不起作用的调用来检测某些东西。 @require 通常会正常工作。

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

顺便说一句,我用这个,略有不同:

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

【讨论】:

【参考方案8】:

这是用于 Greasemonkey 的 jQuery 1.4.4 的缩小版:

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

希望对你有帮助, 嗯

【讨论】:

以上是关于Greasemonkey @require jQuery 不工作“组件不可用”的主要内容,如果未能解决你的问题,请参考以下文章

Greasemonkey 中的本地存储

Greasemonkey:如何自动填写登录表单?

Greasemonkey Add On无法正常工作

火狐浏览器怎样安装GreaseMonkey

Greasemonkey:另外一个拦截/修改获取请求的概念是啥?

Greasemonkey:突出显示 HTML 文件中的许多单词