Ответ 1
В документе для пользовательского проекта script для Chrome упоминаются следующие известные проблемы:
- Хром не поддерживает
@require
,@resource
,unsafeWindow
,GM_registerMenuCommand
,GM_setValue
илиGM_getValue
.GM_xmlhttpRequest
только для одного и того же происхождения.
Это рассматривается в вопросе Включить JQuery внутри GreaseMonkey script в Google Chrome. Вот мой ответ из этого вопроса:
Я написал несколько функций, основанных на ответе script из Эрика Вольда, чтобы помочь мне запускать функции, код и другие скрипты в документе. Вы можете использовать их для загрузки jQuery на страницу, а затем запустить код в глобальной области window
.
Пример использования
// ==UserScript==
// @name Example from https://stackoverflow.com/q/6825715
// @version 1.2
// @namespace https://stackoverflow.com/q/6825715
// @description An example, adding a border to a post on Stack Overflow.
// @include https://stackoverflow.com/questions/2588513/*
// ==/UserScript==
var load,execute,loadAndExecute;load=function(a,b,c){var d;d=document.createElement("script"),d.setAttribute("src",a),b!=null&&d.addEventListener("load",b),c!=null&&d.addEventListener("error",c),document.body.appendChild(d);return d},execute=function(a){var b,c;typeof a=="function"?b="("+a+")();":b=a,c=document.createElement("script"),c.textContent=b,document.body.appendChild(c);return c},loadAndExecute=function(a,b){return load(a,function(){return execute(b)})};
loadAndExecute("//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js", function() {
$("#answer-6825715").css("border", ".5em solid black");
});
Вы можете щелкнуть здесь, чтобы установить его, если вы доверяете, что я не пытаюсь обмануть вас в установке чего-то злонамеренного, и что никто не редактировал мое сообщение, чтобы указать на что-то еще. Перезагрузите страницу, и вы увидите границу вокруг моего сообщения.
Функции
load(url, onLoad, onError)
Загружает script в url
в документ. При желании могут быть предусмотрены обратные вызовы для onLoad
и onError
.
execute(functionOrCode)
Вставляет в документ функцию или строку кода и выполняет ее. Эти функции преобразуются в исходный код перед их вставкой, поэтому они теряют свою текущую область действия/закрытия и запускаются под глобальной областью window
.
loadAndExecute(url, functionOrCode)
Ярлык; он загружает script из url
, затем вставляет и выполняет functionOrCode
в случае успеха.
код
Источник CoffeeScript
Я написал их в CoffeeScript (маленький язык, который компилируется на JavaScript). Вот источник CoffeeScript для использования вами, вы сами используете CofeeScript. Для пользователей JavaScript приведенный и сокращенный код приведен ниже.
load = (url, onLoad, onError) ->
e = document.createElement "script"
e.setAttribute "src", url
if onLoad? then e.addEventListener "load", onLoad
if onError? then e.addEventListener "error", onError
document.body.appendChild e
return e
execute = (functionOrCode) ->
if typeof functionOrCode is "function"
code = "(#{functionOrCode})();"
else
code = functionOrCode
e = document.createElement "script"
e.textContent = code
document.body.appendChild e
return e
loadAndExecute = (url, functionOrCode) ->
load url, -> execute functionOrCode
Скомпилированный и миниатюрный JavaScript (468 символов)
var load,execute,loadAndExecute;load=function(a,b,c){var d;d=document.createElement("script"),d.setAttribute("src",a),b!=null&&d.addEventListener("load",b),c!=null&&d.addEventListener("error",c),document.body.appendChild(d);return d},execute=function(a){var b,c;typeof a=="function"?b="("+a+")();":b=a,c=document.createElement("script"),c.textContent=b,document.body.appendChild(c);return c},loadAndExecute=function(a,b){return load(a,function(){return execute(b)})};