Greasemonkey用户脚本:粘贴jQuery?

时间:2010-06-25 17:10:43

标签: jquery greasemonkey userscripts

我正在开发一个仅用于Firefox的Greasemonkey脚本,我需要一些帮助。我打算稍后使用jQuery,也可能使用其他一些脚本。由于GM的@require仅在初始安装时下载脚本,因此稍后对代码的更新不会下载对外部脚本的更新。

因此,我想知道:如果我粘贴原始jQuery代码会发生什么? IE在这里找到的那​​个:http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js

会导致错误吗?如果使用脚本的网站使用jQuery 1.3.2并将jQuery 1.4.2粘贴到页面中,反之亦然?基本上,如果我粘贴jQuery,jQuery UI等脚本的完整源代码会导致哪些缺点或错误?

谢谢!

3 个答案:

答案 0 :(得分:0)

对于GM,每个脚本都在自己的范围内执行,所以如果你使用@require,或者将一个库(比如jQuery)直接粘贴到你的用户脚本中(这实际上是等效的),那么这将不起作用页面加载的脚本。因此,如果页面已经加载了jQuery并不重要,您仍然可以将任何版本加载到您的用户脚本中。然而,有些版本的jQuery在用户脚本中不起作用,有时人们建议将window变量引用更改为unsafeWindow以使jQuery工作,如果你这样做,那么我刚刚说出窗口,因为unsafeWindow范围是页面脚本的加载位置,因此使用它意味着你要离开用户脚本的范围。

因此,如果你想使用jQuery,那么找一个可以@require'的版本(我认为1.3.2可能有效),而不要求你使用unsafeWindow。

如果必须使用unsafeWindow,请执行以下操作:

// check that jQuery is not already loaded
if (!unsafeWindow.$) {
  // paste jQuery code here..
}

答案 1 :(得分:0)

之前我已经完成了这项工作 - 靠近顶部的一条长jQuery线。它不优雅,但它暂时工作正常,并按预期工作。 Greasemonkey脚本中的变量不会影响网页本身,除非您通过unsafeWindow明确访问网页的范围。

不久之前,我相信jQuery 1.4不再适用于此方法。如果使用1.3是一个选项,请尝试相反。

答案 2 :(得分:-2)

您的代码包含很可能会覆盖页面上的jQuery版本。在大多数情况下并不是什么大问题,尽管jQuery 1.4弃用了以前版本中可能破坏网站上已有JavaScript的某些功能。最值得注意的是,1.4之前的$()返回了文档,它现在返回一个空的jQuery对象。

我认为最好的方法是查看jQuery是否已经加载,检查jQuery对象是否存在,然后检查你需要使用的函数是否存在(如果它是一个函数new到1.4)。如果没有,那么请包含来自Google缓存或任何地方的代码。您可以发出AJAX请求并执行返回的脚本。