@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 ответа:
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 будет доступен в пространстве имен вашего скрипта.