javascript - 运行带有 HTML 标签的用户脚本?

标签 javascript forms greasemonkey userscripts tampermonkey

我想在网站上使用 Tampermonkey 运行此脚本。

将鼠标悬停在 Tampermonkey 图标上时,脚本似乎正在运行,但我无法以任何方式与脚本交互。它应该显示一个带有 4 个输入行的表单。

<script type="text/javascript">
    function calcResult() {
        document.getElementById('result').innerHTML = '';
        var num0 = new Number(document.getElementById('txt0').value);
        var num1 = new Number(document.getElementById('txt1').value);
        var num2 = new Number(document.getElementById('txt2').value);
        var num3 = new Number(document.getElementById('txt3').value);
        if (isNaN(num1) || isNaN(num2) || isNaN(num3)) {
            alert('One or more inputs are not a number');
        } else if ((num0) == 1) {
            document.getElementById('result').innerHTML = 2 * num2 / num3;
        } else if ((num0) == 2) {
            document.getElementById('result').innerHTML = 25 * num1 / num3;
        } else if ((num0) == 3) {
            document.getElementById('result').innerHTML = 14 * num1 / num3;
        } else {
            alert('Virus type must be 1, 2 or 3. Where: 1 - warez, 2 - miner, 3 - spam');
        }
    }
    window.onload = function () {
        document.getElementById('btnCalc').onclick = calcResult;
    }
</script>
<body>
<div>
    Virus type <input type="text" id="txt0"/><br/>
    CPU <input type="text" id="txt1"/><br/>
    Internet Speed <input type="text" id="txt2"/><br/>
    Number of viruses <input type="text" id="txt3"/><br/>
    <button id="btnCalc">Calculate</button>
    <div id="result", per hour></div>
</div>
</body>

最佳答案

问题不包含有效的 Tampermonkey 脚本。
脚本不能使用 HTML 标签(但它们可以使用 DOM 方法操作标签)。

每当脚本没有按照您的预期运行时,您应该检查 the Chrome Console 。如果你有的话,你会看到很多错误,包括:

  • (E030) Expected an identifier and instead saw '<' ...
  • (E058) Missing semicolon on line ...
  • SyntaxError: Unexpected token <
  • 等等,等等

您似乎正在尝试向某个页面添加表单,然后激活它。

添加表单、弹出窗口、对话框等。使用如下所示的技术:How do I pop up a custom form/dialog in a Greasemonkey script? .

这是一个更新的、完整的、正确的 Greasemonkey/Tampermonkey 脚本,它使用问题中的计算器思想来说明该过程:

// ==UserScript==
// @name     _Add "Virus calculator" to page
// @match    http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @grant    GM_addStyle
// ==/UserScript==

//--- Use jQuery to add the form in a "popup" dialog.
$("body").append ( `
    <div id="gmPopupContainer">
    <form>
        <label title="1, 2 or 3. Where: 1 - warez, 2 - miner, 3 - spam">
            Virus type: <input type="number" id="gmVirusType" required>
        </label>
        <label>CPU: <input type="number" id="gmCPU" required></label>
        <label>Internet Speed: <input type="number" id="gmInternetSpeed" required></label>
        <label>Number of viruses: <input type="number" id="gmNumViruses" required></label>
        <button id="gmBtnCalc" type="button">Calculate</button>
        <div id="gmResult"><strong>Result: </strong><span></span>, per hour</div>
    </form>
    </div>
` );

//--- Use jQuery to activate the dialog buttons.
$("#gmBtnCalc").click (calcResult);
function calcResult () {
    var rezCell = $("#gmResult > span");
    rezCell.text ("");

    var vType   = parseInt ( $("#gmVirusType").val (),      10);
    var CPU     = parseInt ( $("#gmCPU").val (),            10);
    var intSpd  = parseInt ( $("#gmInternetSpeed").val (),  10);
    var numVrs  = parseInt ( $("#gmNumViruses").val (),     10);

    switch (vType) {
        case 1:
            rezCell.text (2 * intSpd / numVrs);
            break;
        case 2:
            rezCell.text (25 * CPU / numVrs);
            break;
        case 3:
            rezCell.text (14 * CPU / numVrs);
            break;
        default:
            alert ("Virus type must be 1, 2 or 3. Where: 1 - warez, 2 - miner, 3 - spam.");
            break;
    }
}

//--- CSS styles make it work...
GM_addStyle ( `
    #gmPopupContainer {
        position:               fixed;
        top:                    10%;
        left:                   10%;
        padding:                2em;
        background:             powderblue;
        border:                 3px double black;
        border-radius:          1ex;
        z-index:                777;
    }
    #gmPopupContainer button {
        cursor:                 pointer;
        margin:                 1em auto;
        padding:                0.5ex 2ex;
        border:                 1px outset buttonface;
    }
    #gmPopupContainer > form > label {
        display:                block;
    }
` );
<小时/>

在 Stack Overflow 上运行脚本,结果如​​下所示:

        sample screen

关于javascript - 运行带有 HTML 标签的用户脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39936115/

相关文章:

javascript - pg-promise 在更新中使用命名参数会导致 ReferenceError

php - 表单未提交到数据库

javascript - 无法POST表单数据

javascript - 全局函数的 "this"指针是什么?

javascript - 无法使用 firebug 或 firefox 调试器调试 greasemonkey 脚本

javascript - 为什么 web audio api 振荡器不能在 Safari Mobile 中播放?

javascript - react : Passing Props from grandparent to grandchild

javascript - 以 react-hook-form 的 onChange 输入

greasemonkey - 如何确定为什么Greasemonkey脚本未运行

javascript - 检查表格行列中的值