Использование jQuery 1.4 в GreaseMonkey, в то время как исходная страница использует jQuery 1.3 (другая версия)? - PullRequest
3 голосов
/ 29 апреля 2010

Какова лучшая стратегия для предоставления необходимой новой версии 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) для ссылки на объект jQuery 1.4.2 внутри code142().

Если больше ничего не появится, тогда это будет моим решением. Я надеюсь, что это полезно для других людей, которые могут столкнуться с этой проблемой.

1 Ответ

2 голосов
/ 29 апреля 2010

Я думаю, это то, что вы ищете .

Пока вы не делаете ничего сложного и новейшая версия не требуется, следуйте шаблону в ссылке для ее включения.

Проверяет, загружен ли jQuery (typeof unsafeWindow.jQuery == 'undefined'), прежде чем включать снова. «Простая» часть просто означает, что то, что вы делаете, будет работать в 1.3 и 1.4, возможно, в 1.2.6? Если это так, то не имеет значения, какую версию вы загружаете, если она загружена. (Если это не очень старый сайт, тогда проверьте, что функции, которые вы используете, возвращаются в ядро ​​jQuery , но это гораздо менее вероятно)

...