未定义的原因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);
}