gpt4 book ai didi

javascript - 阻止 UserScript 自动点击

转载 作者:行者123 更新时间:2023-12-02 21:23:47 25 4
gpt4 key购买 nike

下面的代码是我创建的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com