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