Chromeのユーザー スクリプトの実装に関する設計ドキュメントには、次の既知の問題が記載されています。
- Chromium は、、、、、、またはをサポート
@require
し@resource
ていません。unsafeWindow
GM_registerMenuCommand
GM_setValue
GM_getValue
GM_xmlhttpRequest
同一原産地のみです。
これは、Google Chrome の GreaseMonkey スクリプト内に Jquery を含めるの質問で対処されています。その質問からの私の答えは次のとおりです。
ドキュメント内の関数、コード、およびその他のスクリプトを実行するのに役立つErik Vold の回答のスクリプトに基づいて、いくつかの関数を作成しました。これらを使用して 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)
スクリプトをドキュメントにロードしurl
ます。オプションで、onLoad
およびにコールバックを提供できますonError
。
execute(functionOrCode)
関数またはコードの文字列をドキュメントに挿入して実行します。関数は挿入される前にソース コードに変換されるため、現在のスコープ/クロージャが失われ、グローバルwindow
スコープの下で実行されます。
loadAndExecute(url, functionOrCode)
ショートカット; これは からスクリプトをロードし、成功した場合url
は挿入して実行functionOrCode
します。
コード
ソースCoffeeScript
私はこれらを CoffeeScript ( JavaScript にコンパイルする小さな言語) で書きました。これは、あなた自身が CofeeScript を使用している場合に使用するための CoffeeScript ソースです。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)})};