Как некоторые из Вас могут знать, Google Chrome поместил некоторое серьезное ограничение на сценарии Механика.
Хром не поддерживает
@require
,@resource
,unsafeWindow
,GM_registerMenuCommand
,GM_setValue
, илиGM_getValue
.
Без требуют, я не могу найти способ включать библиотеку jQuery в сценарий Механика под Google Chrome.
У кого-либо есть некоторый совет в этом вопросе?
Из «Совет по пользовательскому сценарию: Использование jQuery - Блог Эрика Волда»
// ==UserScript==
// @name jQuery For Chrome (A Cross Browser Example)
// @namespace jQueryForChromeExample
// @include *
// @author Erik Vergobbi Vold & Tyler G. Hicks-Wright
// @description This userscript is meant to be an example on how to use jQuery in a userscript on Google Chrome.
// ==/UserScript==
// a function that loads jQuery and calls a callback function when jQuery has finished loading
function addJQuery(callback) {
var script = document.createElement("script");
script.setAttribute("src", "//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js");
script.addEventListener('load', function() {
var script = document.createElement("script");
script.textContent = "window.jQ=jQuery.noConflict(true);(" + callback.toString() + ")();";
document.body.appendChild(script);
}, false);
document.body.appendChild(script);
}
// the guts of this userscript
function main() {
// Note, jQ replaces $ to avoid conflicts.
alert("There are " + jQ('a').length + " links on this page.");
}
// load jQuery and execute the main function
addJQuery(main);
Кроме того, вы можете упаковать свой скрипт с расширением jQuery для Chrome. См. Сценарии содержания Google Chrome .
Расширения Chrome, в отличие от скриптов Greasemonkey, могут автоматически обновляться.
Другой подход - изменить ваш скрипт для загрузки jQuery вручную. Пример из http://joanpiedra.com/jquery/greasemonkey/ :
// Add jQuery
var GM_JQ = document.createElement('script');
GM_JQ.src = 'http://jquery.com/src/jquery-latest.js';
GM_JQ.type = 'text/javascript';
document.getElementsByTagName('head')[0].appendChild(GM_JQ);
// Check if jQuery's loaded
function GM_wait() {
if(typeof unsafeWindow.jQuery == 'undefined') { window.setTimeout(GM_wait,100); }
else { $ = unsafeWindow.jQuery; letsJQuery(); }
}
GM_wait();
// All your GM code must be inside this function
function letsJQuery() {
alert($); // check if the dollar (jquery) function works
}
РЕДАКТИРОВАТЬ: DRATS! После тестирования выяснилось, что этот код не работает, поскольку Google Chrome запускает пользовательские скрипты / расширения в отдельной области / процессе, отличной от реальной веб-страницы. Вы можете загрузить код jQuery с помощью XmlhttpRequest, а затем оценить его, но вы должны разместить код на сервере, который позволяет совместное использование ресурсов между источниками с помощью Access-Control-Allow-Origin: *
заголовок. К сожалению НИ ОДИН из текущих CDN с jQuery не поддерживает это.
Интересно, нельзя ли полагаться на document.defaultView.jQuery
в вашем СКРИПТЕ GM ala:
if (document.defaultView.jQuery) {
jQueryLoaded(document.defaultView.jQuery);
} else {
var jq = document.createElement('script');
jq.src = 'http://jquery.com/src/jquery-latest.js';
jq.type = 'text/javascript';
document.getElementsByTagName('head')[0].appendChild(jq);
(function() {
if (document.defaultView.jQuery) jQueryLoaded(document.defaultView.jQuery);
else setTimeout(arguments.callee, 100);
})();
}
function jQueryLoaded($) {
console.dir($);
}
Идеальное расширение для встраивания jQuery в Chrome Console так просто, как вы можете себе представить. Это расширение также делает вывод, если jQuery уже был встроен в страницу.
Это расширение используется для встраивания jQuery в любую страницу, которую вы хотите. Это позволяет использовать jQuery в оболочке консоли (Вы можете вызвать консоль Chrome с помощью "Ctrl+Shift+j").
Для встраивания jQuery в выбранную вкладку нажмите на кнопку расширения.
ССЫЛКА расширения: https://chrome.google.com/extensions/detail/gbmifchmngifmadobkcpijhhldeeelkc