在用户脚本中提供必要的新版本 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()
。
如果没有其他问题出现,那么这将是我的解决方案。我希望它对可能遇到此问题的其他人有用。