@require-ing jQuery перезаписывает переменную $ страницы


Я @require - ing jQuery для моего скрипта Greasemonkey с этой строкой в моем файле скрипта:

// @require https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js

И это работает довольно хорошо; я могу использовать $('#id') для доступа к DOM.

Однако переменная $ "реальной" страницы модифицируется (где $ - это jQuery 1.2.обман): Я получаю ошибку, которая $.include не определена.

Я думал, что модель песочницы Greasemonkey предотвратит перезапись переменных целевой страницы?

Как я могу гарантировать, что включение javascript библиотеки не влияют на "реальный" сайт,а только на мой скрипт Greasemonkey?

2 3

2 ответа:

Greasemonkey 1.0, радикально изменил способ работы песочницы , перебив тысячи скриптов. Смотрите также, jQuery в Greasemonkey 1.0 конфликтует с сайтами, использующими jQuery .

Это огромная проблема, и я надеюсь, что вы присоединитесь ко мне в изложении своего мнения/опыта по основной отчет об ошибке для этого вопроса.

Тем временем восстановите песочницу в вашем скрипте и разрешите конфликт $, отредактировав ваш сценарий. Блок метаданных для завершения со следующими строками :

// @grant       GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a major design change introduced in GM 1.0,
    It restores the sandbox.
*/


Указание значения @grant (отличного от none) повторно активирует песочницу.


Вы также можете рассмотреть возможность перехода на Scriptish, который предлагал превосходные функции и производительность в прошлом и не страдает от этого нового поведения песочницы.

См.jQuery.noConflict();; это многое объясняет.

Правка:
Найдено "Greasemonkey 1.0 + jQuery: сломано, с обходным путем" при поиске.

Возможное решение:

 this.$ = this.jQuery = jQuery.noConflict(true);

Делая это, вероятно, неявно укажет, что$, jQuery будет доступен в пространстве имен вашего скрипта.