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