2010-04-29 9 views
3

Quelle est la meilleure stratégie pour fournir une nouvelle version nécessaire de jQuery (1.4.2) dans un script utilisateur, qui modifie une page qui a déjà une ancienne version de jQuery (1.3.1)? De préférence, la page d'origine continue à utiliser le signe '$' tandis que dans mon script, elle utilise un alias affecté par jquery.noConflict().L'utilisation de jQuery 1.4 dans GreaseMonkey alors que la page d'origine utilise jQuery 1.3 (version différente)?

Selon la réponse à this question, toute version supplémentaire que vous souhaitez charger doit être placée au-dessus de l'étiquette de script d'origine. C'est là que je suis un peu confus, puisque je suis sous l'impression GreaseMonkey exécute le script après chargement de la page?

EDIT: Une pensée est dans le userscript, ajoutez une balise de script pour jQuery 1.4.2, alias défini, puis ajouter une balise de script pour 1.3.1 à nouveau afin de ne pas briser le code de la page originale, qui utilise 1.3.1 fonctions.

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); 

*/ 

Mais cela nécessitera le chargement de la bibliothèque jQuery 3 fois par page. Y a-t-il une meilleure façon?

EDIT 2: Il semble que la page d'origine puisse toujours utiliser sa copie 1.3.1, bien que le script GM ait fourni une copie 1.4.2, ils peuvent coexister aussi longtemps que j'utilise le nouvel alias (gj) pour faire référence à l'objet jQuery 1.4.2 à l'intérieur de code142().

Si rien d'autre ne se présente alors ce serait ma solution. J'espère que c'est utile à d'autres personnes qui pourraient rencontrer ce problème.

Répondre

2

I believe this is what you're looking for.

Tant que vous ne faites rien de compliqué et que la nouvelle version n'est pas nécessaire, suivez le modèle dans le lien pour l'inclure.

Il vérifie si jQuery est chargé (typeof unsafeWindow.jQuery == 'undefined') avant de l'inclure à nouveau. La partie "simple" signifie simplement que ce que vous faites fonctionnera dans 1.3 et 1.4, peut-être 1.2.6? Si c'est le cas, peu importe la version que vous chargez, tant qu'elle est chargée. (À moins que ce soit très ancien site, puis check that the functions you're using so way back in jQuery core, mais c'est beaucoup moins probable)

+0

Salut. La dernière version est requise dans ce cas, car l'ancienne version de la page d'origine ne prend pas en charge certaines des fonctionnalités que je souhaite utiliser pour mon script utilisateur. – Dan7