未定義の理由exampleFunction
は、Chrome のユーザー スクリプトがサンドボックス ( 「孤立した世界」 ) で動作するためです。Greasemonkey スクリプトもサンドボックスで動作することが多いことに注意してください@grant none
。
スクリプトでGM_
関数を使用すると、Firefox でも機能しなくなります。
このスクリプトを両方のブラウザー (およびその他のいくつかのブラウザー) で機能させるには、この回答と同様のスクリプト インジェクション を使用します。
ただし、そのスクリプトは を使用しているため、別の問題がありwindow.onload
ます。デフォルトの実行開始モードの Chrome ユーザースクリプトでは、多くの場合、onload
イベントが表示されません。
// @run-at document-end
これを回避するには、メタデータ ブロックに追加します。
したがって、スクリプトは次のようになります。
// ==UserScript==
// @name SomeName
// @namespace http://example.com/userscripts
// @description Greets the world
// @include http://example.com/*
// @run-at document-end
// @grant none
// ==/UserScript==
function GM_main () {
window.onload = function () {
console.log(exampleFunction);
alert("LOADED!");
}
}
addJS_Node (null, null, GM_main);
//-- This is a standard-ish utility function:
function addJS_Node (text, s_URL, funcToRun, runOnLoad) {
var D = document;
var scriptNode = D.createElement ('script');
if (runOnLoad) {
scriptNode.addEventListener ("load", runOnLoad, false);
}
scriptNode.type = "text/javascript";
if (text) scriptNode.textContent = text;
if (s_URL) scriptNode.src = s_URL;
if (funcToRun) scriptNode.textContent = '(' + funcToRun.toString() + ')()';
var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
targ.appendChild (scriptNode);
}