在原始页面使用jQuery 1.3(不同的版本)时,在GreaseMonKey中使用jQuery 1.4?
-
02-10-2019 - |
题
在用户标记中提供必要新版本的jQuery(1.4.2)的最佳策略是什么,该版本修改了已经具有较旧版本的jQuery(1.3.1)的页面?
最好是原始页面继续使用“ $”符号,而在我的脚本中,它使用的别名为 jquery.noConflict()
.
根据答案 这个问题, ,任何一个希望加载的额外版本都应放在原始脚本标签上方。这是我有点困惑的地方,因为我在印象Greasemonkey处执行页面加载后执行脚本?
编辑: 一个想法是在Userscript中,附加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);
*/
但这需要每页3次加载jQuery库。有更好的方法吗?
编辑2: 似乎原始页面仍然可以使用其1.3.1副本,尽管GM脚本已经提供了1.4.2副本,但只要我使用新的别名,它们就可以共存(gj
)参考内部的1.4.2 jQuery对象 code142()
.
如果什么都没有出现,那将是我的解决方案。我希望这对可能遇到这个问题的其他人很有用。
解决方案
只要您没有做任何复杂的事情,也不需要最新版本,请按照链接中的模式进行包含。
它检查是否加载了jQuery(typeof unsafeWindow.jQuery == 'undefined'
)在再次包括之前。 “简单”部分只是意味着您在1.3和1.4(可能是1.2.6)中所做的工作?如果是这种情况,只要加载了哪个版本,就无关紧要。 (除非是 非常 旧网站,然后 检查您使用的功能是否在jQuery Core中返回, ,但这可能小得多)
不隶属于 StackOverflow