-1

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

因此,我想知道:如果我粘贴原始 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 等脚本的完整源代码,会导致哪些缺点或错误?

谢谢!

4

3 回答 3

0

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

因此,如果您想使用 jQuery,请找到一个可以@require'd 的版本(我认为 1.3.2 可能会工作),而无需您使用 unsafeWindow。

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

// check that jQuery is not already loaded
if (!unsafeWindow.$) {
  // paste jQuery code here..
}
于 2010-06-27T03:06:35.080 回答
0

我以前做过 - 靠近顶部的一条长 jQuery 行。它并不优雅,但暂时可以正常工作,并且可以按预期工作。Greasemonkey 脚本中的变量不会影响网页本身,除非您通过unsafeWindow.

然而,这是不久前的事了,我相信 jQuery 1.4 不再使用这种方法了。如果使用 1.3 是一个选项,请尝试使用它。

于 2010-06-27T03:59:21.430 回答
-2

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

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

于 2010-06-25T17:19:51.003 回答