我喜欢 GM 的概念,但在实践中,除非你一直使用它并且是绝对的 JS 神,否则它是不可能使用的(也许我只是很烂?)。
如果有一个小的扩展,可以使用几行 JS 并在某个站点的页面加载后运行它们,那将非常有用。但这不是通用汽车所做的。使用 GM,您必须处理多个框架以及层层叠叠的恼人安全问题和范围。 即使您只是忽略适当的程序并使用 unsafewindow 或其他黑客之一,它通常仍然不起作用。
想出 JS 很容易,你可以在浏览器控制台中运行它来做你想做的事,但是当转移到用户脚本时这永远不会起作用。 greasemonkey 中是否有我可以更改的任何设置或完全不同的扩展以方便使用?
注意:我使用 Chrome,因此适用于该特定浏览器的解决方案可加分。
总结:我想要一种方法来自动运行与特定页面上的控制台具有相同范围/权限的脚本。
最佳答案
没有比 Firefox 的 Greasemonkey 或自动运行用户 JS 的 Chrome 用户脚本更简单的替代方案。你可以 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),但您的代码仍会在文档加载时触发。
关于javascript - Greasemonkey 的简单替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10958386/