22

我写了一个简单的 Greasemonkey 脚本,我正在尝试为这个脚本创建一个“配置”页面(就像用于 Google Chrome 扩展的那个。)有没有办法为用户脚本创建一个配置页面,比如 Google Chrome 扩展的“选项”页面?没有任何方法可以将 .html 页面作为 Greasemonkey 脚本的一部分(据我所知),因此我正在寻找其他选项。

// ==UserScript==
// @name       Redirector
// @namespace  http://use.i.E.your.homepage/
// @version    0.1
// @description  enter something useful
// @match      http://*/*
// @copyright  2012+, You
// @run-at document-start
// ==/UserScript==

redirectToPage("http://www.youtube.com/", "http://www.google.com");

function redirectToPage(page1, page2){
if(window.location.href.indexOf(page1) != -1){
    window.location.href = page2;
}
}
4

5 回答 5

26

有一些库为用户脚本提供配置页面:

1) GM_配置

GM_config 对话框示例

2)猴子配置

示例 MonkeyConfig 对话框

3) GM_registerMenuCommand 子菜单 JS 模块


每个库的用法各不相同,但通常您授予他们所需的权限,例如GM_getValueand ,并通过指令GM_setValue要求该库,例如:@require

// ==UserScript==
// @name          My Userscript
// @description   An example userscript with a config page
// @version       0.0.1
// @require       https://www.example.com/lib/myconfig.js
// @grant         GM_getValue
// @grant         GM_setValue
// @grant         GM_addStyle
// @grant         GM_registerMenuCommand
// ==/UserScript==

const config = new MyConfig({ ... })

然后,您注册一个打开配置页面/对话框的菜单命令,例如:

GM_registerMenuCommand('Configure My Userscript!', () => {
    config.open()
})

在 MonkeyConfig 的情况下,它可以为您注册命令:

const config = new MonkeyConfig({
    title: 'Configure My Userscript!',
    menuCommand: true,
    // ...
})

对于高级用途,配置器可以允许为关闭/取消/保存事件注册侦听器,并提供对 CSS 和其他选项的控制。详细说明可以在GM_config wikiMonkeyConfig 主页上找到。

于 2017-04-18T02:06:37.337 回答
8

如果您将它用于 chrome,那么它不是 Greasemonkey 而是 Tampermonkey。

您可以考虑使用 GM_getResourceText,将您的 html 粘贴到 pastebin.com(或类似网站)并将链接作为 @resource 之一添加到元数据块中。至少,我知道它对 Greasemonkey 有效。

例如:

// @resource configHtml http://pastebin.com/raw.php?i=2RjKfwJQ

// ... some DOM node that you will append to the current page
node.innerHTML = GM_getResourceText("configHtml");
于 2013-01-30T11:36:58.347 回答
1

这是非常需要的,但现在两种方法的组合应该可以工作。

1)为了个人使用,我在脚本顶部只有一堆变量。这里的问题是,如果其他人使用我的脚本,更新最终会删除他的偏好。

2)在您的网站上有一个配置页面。虽然这非常有效,但网站总是被删除。脚本没有充分的理由依赖网站来工作。

如果您同时执行这两项操作,则用户可以在脚本网站消失时编辑脚本中的首选项。

这是一个示例,其中不需要的功能被 // 注释掉了。

http://go-here.nl/gm/wikipedia-clean-up.php

祝你好运,享受

于 2015-05-16T14:58:24.377 回答
1

对您已经包含的页面使用参数,如果已设置,则清除整个文档: http://page.my.script.runs.on/?configPage=true

if(getUrlParameter("configPage") === "true") {
    $(document).empty
}
于 2016-03-05T16:12:57.063 回答
1

此用户脚本不使用任何外部库。通过修改你可以做出好的用户界面。

// ==UserScript==
// @name         UI development
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       ManojBhakarPCM
// @match        https://www.google.com/
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    function ui_create(contentss){
        var div = document.createElement('div');
        //var contentss = "<h1>TESTsssss</h1>";
        div.innerHTML = '<div id="mbpcm_modal" style="position: fixed;z-index: 1;left: 0;top: 0;width: 100%;height: 100%;overflow: auto;display:none;"><div id="mbpcm_content" style="background-color: pink;margin: 15% auto;padding: 20px;border: 1px solid black;width: 20%;box-shadow:20px 20px 30px 2px gray;border-radius:7px;"><span id="mbpcm_close" style="float: right;font-size:25px;cursor: pointer;">&times;</span>'+ contentss +'</div></div>';
        document.body.appendChild(div);
        var modal = document.getElementById("mbpcm_modal");
        var close = document.getElementById("mbpcm_close");
        close.onclick = function(){modal.style.display = "none";}
    }
    function ui_add_opener(parent,classs,stylee){
        var btn = document.createElement("button");
        btn.setAttribute("class",classs);
        btn.setAttribute("style",stylee);
        btn.setAttribute("id","mbpcm_ui_opener");
        btn.innerHTML = "Settings";
        parent.appendChild(btn);
        var modal = document.getElementById("mbpcm_modal");
        var btnn = document.getElementById("mbpcm_ui_opener");
        btnn.onclick = function(){modal.style.display = "block";}
    }
    function ui_addElement(el,cls,styl,val,innerHtml){
        var modal = document.getElementById("mbpcm_content");
        var e = document.createElement(el);
        e.setAttribute("class",cls);
        e.setAttribute("style",styl);
        e.setAttribute("value",val);
        e.innerHTML = innerHtml;
        modal.appendChild(e);
        return e;
    }

    ui_create("<h1>Title</h1><span>discription</span><br>");
    ui_add_opener(document.getElementById("gbw"),"RNmpXc","nothing");
    ui_addElement("button","modal","none","none","TestButton").onclick = function(){alert("hellow ji ");}
    ui_addElement("br","","","","");
    ui_addElement("button","none","none","none","TestButton").onclick = function(){alert("How are you");}
    ui_addElement("button","none","none","none","TestButton").onclick = function(){alert("Kaise ho");}
})();
于 2020-10-02T14:35:47.997 回答