javascript - 阻止 UserScript 自动点击

标签 javascript html userscripts

下面的代码是我创建的 JavaScript 用户脚本的一部分,用于在 Reddit 上的特定 subreddit 上添加评论按钮:

// ==UserScript==
// @name         Assholedesign Repost Commenter
// @namespace    Reddit
// @version      0.1
// @description  Add repost buttons to r/assholedesign
// @author       Duncan Yang
// @include      https://*.reddit.com/r/assholedesign/comments/*
// @include      http://*.reddit.com/r/assholedesign/comments/*
// @run-at document-start
// ==/UserScript==

window.addEventListener("DOMContentLoaded", function() {
    var edit_form = document.querySelector("form > div.usertext-edit").parentNode;
    var btns = edit_form.querySelector("div.usertext-edit > div.bottom-area > div.usertext-buttons");
    var save_btn = btns.querySelector("button.save");
    var edit_textbox = edit_form.querySelector("div.usertext-edit > div > textarea");

    var repost_text = function(a) {
        edit_textbox.value = a;
        console.log(a);
    }

    try
    {
        var cancel_btn = btns.querySelector("button.cancel");

        var a00 = document.createElement("button");
        var a01 = document.createElement("button");
        var a02 = document.createElement("button");

        // This section of code is
        a00.setAttribute("class", "save");
        a00.innerHTML = "Repost";
        a00.addEventListener("click", repost_text("Repost"));
        a01.setAttribute("class", "save");
        a01.innerHTML = "General Repostii";
        a01.addEventListener("click", repost_text("[General Repostii](https://reddit.com/r/assholedesign/wiki/common_topics)"));
        a02.setAttribute("class", "save");
        a02.innerHTML = "Cold One";
        a02.addEventListener("click", repost_text("[General Repostii, you are a cold one.](https://reddit.com/r/assholedesign/wiki/common_topics)"));
        // where I am having problems.

        btns.insertBefore(a00, cancel_btn);
        btns.insertBefore(a01, cancel_btn);
        btns.insertBefore(a02, cancel_btn);
    }
    catch (err)
    {
        console.log(err);
    }
}, false);

此脚本当前已被禁用,因为它存在页面加载时自动单击一个或多个按钮的问题。我怎样才能解决这个问题,以便不再出现错误点击?

最佳答案

问题是您的 addEventListener 回调立即运行。

addEventListener 等函数中的回调需要是一个不会立即运行的函数。

例如,一旦注入(inject)代码,以下代码就会alert('Hello')

target.addEventListener('click', alert('Hello'));

但是,正确的方法是将其包装在如下函数中:

target.addEventListener('click', function() { alert('Hello'); });

以上只会在事件触发后运行。

在您的代码中,以下代码将立即运行。

a00.addEventListener("click", repost_text("Repost"));

将其更改为:

a00.addEventListener("click", function() { repost_text("Repost"); });

或箭头函数:

a00.addEventListener("click", () => repost_text("Repost"));

仅供引用,如果您不想将数据传递给函数,则以下内容也可以:

a00.addEventListener("click", repost_text);

关于javascript - 阻止 UserScript 自动点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60790957/

相关文章:

java - 访问小程序的 javascript 支持重载吗?

javascript - Phaser——如何检查 Sprite 是否在移动?

javascript - 执行 php 后如何加载用户脚本?

javascript - Sequelize, findall 查询,如何按特定顺序返回数组?

javascript - 选择正确的技术(SVG 与 Canvas)

jquery - 如何模糊除 (this) a :hover 之外的所有列表项文本

javascript - CanvasRenderingContext2D.putImageData 的参数 1 没有实现接口(interface) ImageData

html - 如何在css中完成这个设计?

javascript - 删除匿名事件监听器

javascript - 用户脚本在 Firefox 中有效,但 Chrome 给出 : Uncaught TypeError: Cannot read property 'length' of null