2010-04-29 66 views
3

在userscript中提供必要的新版本jQuery(1.4.2)的最佳策略是什么,它修改了一个已经具有旧版本jQuery(1.3.1)的页面?在GreaseMonkey中使用jQuery 1.4,而原始页面使用jQuery 1.3(不同版本)?

最好原始页面继续使用'$'符号,而在我的脚本中它使用由jquery.noConflict()指定的别名。

根据对this question的回答,任何一个希望加载的额外版本都应放置在原始脚本标记之上。这是我有点困惑,因为我有印象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); 

*/ 

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

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

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

回答

2

I believe this is what you're looking for

只要您没有做任何复杂的事情,并且不需要最新版本,请按照链接中的模式进行操作。

它再次包含之前检查jQuery是否加载(typeof unsafeWindow.jQuery == 'undefined')。 “简单”部分只是意味着你在1.3和1.4中工作,可能是1.2.6?如果是这种情况,只要加载了哪个版本就无关紧要了。 (除非它是一个非常旧网站,然后check that the functions you're using so way back in jQuery core,但这是不太可能)

+0

嗨。这种情况下需要最新版本,因为原始页面上的旧版本不支持我想用于我的用户脚本的一些功能。 – Dan7 2010-04-29 16:55:13

相关问题