You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么自制的自动点击书签脚本会两次弹出输入提示框?

重复弹窗原因
  • 你在监听回调中调用target.click()生成的模拟点击事件,同样会冒泡到document节点,触发你绑定的点击监听函数
  • 原代码是在所有模拟点击执行完成后才将clicked设为true,第二次触发监听函数时clicked仍然为false,因此会再次弹出输入框
修复方案

有两种常用的修复逻辑,你可以根据使用需求选择:

方案1:单次执行自动解绑(最符合书签脚本使用习惯)

点一次书签触发脚本,选元素点击执行完自动失效,下次使用再点书签即可,不会残留全局事件监听:

document.onclick = function(event) {
    // 阻止当前点击事件冒泡和默认行为,避免干扰页面原有逻辑
    event.preventDefault();
    event.stopPropagation();
    // 直接解绑监听,后续模拟点击不会再触发当前逻辑
    document.onclick = null;

    const target = 'target' in event ? event.target : event.srcElement;
    const inputVal = prompt("请输入点击次数,点击元素为:" + (target.id || '未命名元素'));
    const clickamount = parseInt(inputVal);
    // 输入非法直接终止执行
    if (isNaN(clickamount) || clickamount < 1) return;

    // 手动点击已经触发了一次,所以模拟点击次数减1
    for (let i = 0; i < clickamount - 1; i++) {
        target.click();
    }
};

方案2:支持多次连续触发

不用重复点书签,每次点击元素都会弹出输入框执行点击,适合需要多次操作不同元素的场景:

let isProcessing = false;
document.onclick = function(event) {  
    // 正在执行点击逻辑时直接跳过,避免重复触发
    if (isProcessing) return;
    isProcessing = true;
    event.stopPropagation();

    const target = 'target' in event ? event.target : event.srcElement;
    const inputVal = prompt("请输入点击次数,点击元素为:" + (target.id || '未命名元素'));
    const clickamount = parseInt(inputVal);
    if (isNaN(clickamount) || clickamount < 1) {
        isProcessing = false;
        return;
    }

    for (let i = 0; i < clickamount - 1; i++) {
        target.click();
    }
    // 执行完成后重置状态,支持下一次点击触发
    isProcessing = false;
};

内容的提问来源于stack exchange,提问作者Dormierian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:39:02