javascript – Greasemonkey的简单替代品

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

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...