3

在用户脚本中提供必要的新版本 jQuery (1.4.2) 的最佳策略是什么,它修改已经具有旧版本 jQuery (1.3.1) 的页面?

最好原始页面继续使用“$”符号,而在我的脚本中它使用由jquery.noConflict().

根据这个问题的答案,任何希望加载的额外版本都应该放在原始脚本标签之上。这是我有点困惑的地方,因为我的印象是 GreaseMonkey 在页面加载后执行脚本?

编辑:一个想法是在用户脚本中,为 jQuery 1.4.2 附加一个脚本标签,设置别名,然后再次为 1.3.1 附加一个脚本标签,以免破坏使用 1.3.1 函数的原始页面代码。

var code142 = function() {
    gj = jQuery.noConflict(true);
    alert("142...");
    alert(gj); // check if the dollar (jquery) function works
    alert(gj().jquery); // check jQuery version
}

var script = document.createElement("script");
script.src = 'http://code.jquery.com/jquery-1.4.2.min.js'
document.documentElement.appendChild(script);


// assign jquery object alias and run code that uses 1.4.2 there
var script = document.createElement("script");
script.textContent = '(' + code142.toString() + ')();';
document.documentElement.appendChild(script);

/* The following is perhaps redundant, see EDIT 2 for more info

// add jquery 1.3.1 (again)
var script = document.createElement("script");
script.src = 'http://code.jquery.com/jquery-1.3.1.min.js'
document.documentElement.appendChild(script);

*/

但这需要每页加载 jQuery 库 3 次。有没有更好的办法?

编辑 2:看起来原始页面仍然可以使用其 1.3.1 副本,尽管 GM 脚本提供了 1.4.2 副本,但只要我使用新别名 ( gj) 来引用它们,它们就可以共存1.4.2 里面的 jQuery 对象code142()

如果没有其他问题出现,那么这将是我的解决方案。我希望它对可能遇到此问题的其他人有用。

4

1 回答 1

2

我相信这就是你要找的

只要您没有做任何复杂的事情并且不需要最新版本,请按照链接中的模式将其包含在内。

typeof unsafeWindow.jQuery == 'undefined'它会在再次包含之前检查 jQuery 是否已加载( )。“简单”部分只是意味着你正在做的事情会在 1.3 和 1.4 中工作,可能是 1.2.6?如果是这种情况,您加载哪个版本并不重要,只要它已加载即可。(除非它是一个非常古老的站点,否则请检查您在 jQuery 核心中使用的函数,但这不太可能)

于 2010-04-29T11:27:35.413 回答