我喜欢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),但您的代码仍将在文档加载时触发.