我喜欢GM的概念,但在实践中,除非你一直使用它并且是一个绝对的JS神,它是不可能使用的(也许我只是吮吸?).
如果有一些扩展需要几行JS并在页面加载后为某个站点运行它会非常有用.但这不是通用汽车所做的.通过GM,你必须处理多个框架和那些层层的烦人的安全问题和范围.
即使你只是忽略了正确的程序并使用不安全的窗口或其他一个黑客,它通常仍然无法正常工作.
你可以很容易地想出JS,你可以在浏览器控制台中运行,它可以做你想要的,但是当转移到用户脚本时,它永远不会有效.我可以更改的greasemonkey中的任何设置,还是完全不同的扩展,以便于使用?
注意:我使用Chrome,因此针对该特定浏览器的解决方案的奖励积分.
总结:我想要一种方法来自动运行与特定页面上的控制台具有相同范围/权限的脚本.
解决方法
除了Firefox的Greasemonkey或Chrome的自动运行用户JS的用户脚本之外,没有更简单的替代方案.你可以
write your own extension/add-on,但没有多大意义.
如果你不关心GM和用户脚本提供的强大的额外功能,并且总是希望在某个站点的页面加载后“(接受)几行JS和(运行)它们” – 忽略iframe,那么只是使用以下代码作为所有脚本的基本模板:
// ==UserScript==
// @name _Base template for simple,cross-browser,JS injection.
// @match *://YOUR_SERVER.COM/YOUR_PATH/*
// @run-at document-start
// ==/UserScript==
if (window.top != window.self) //-- Don't run on frames or iframes.
return;
function scriptMain () {
// PUT ALL OF YOUR CODE HERE,INCLUDING ANY FUNCTIONS YOU CREATE.
console.log ("Hello World!");
}
window.addEventListener ("load",scriptMainLoader,false);
function scriptMainLoader () {
addJS_Node (null,null,scriptMain);
}
function addJS_Node (text,s_URL,funcToRun) {
var D = document;
var scriptNode = D.createElement ('script');
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);
}
请注意,@ run-at document-start是必需的(对于Chrome),但您的代码仍将在文档加载时触发.