双击HTML

时间:2018-02-20 22:18:46

标签: javascript html greasemonkey tampermonkey

我的代码非常简单:

var clickCount = 0, clickEl = [];
var manualClick = false;
$(document).on('click', 'a', function (e) {
    if (e.altKey || e.ctrlKey || e.shiftKey) {
        return;
    }
    clickCount = clickCount + 1;
    clickEl[clickCount] = this;

    var that = this;
    if (1 === clickCount) {
        setTimeout(function () {
            if (2 === clickCount && clickEl[1] === clickEl[2]) {
                window.stop();
                embed_anchor(that);
            }
            clickCount = 0;
        }, 250);
    }
});

它基本上检查是否有双击。如果是,则使用window.stop()取消单击重定向。过去工作得很好,但我不知道它是Chrome还是我的新电脑,window.stop()失败了9.5 / 10次。

即使是简单的代码,如:

setInterval(function () {
    window.stop();
}, 1);

这些天无法阻止重定向。对我来说有什么替代解决方案吗?理想情况下,我不想使用e.preventDefault(),因为此脚本是TamperMonkey的一部分,我觉得e.preventDefault()会在大量网站上单击一下。

是否有任何方法可以将事件保持250毫秒,或者取消并引发相同的事件(它必须像上一个一样,所以任何站点都没有问题)。我开的太多了。如果我的脚本不在某些网站上工作而不是破坏任何网站,我更愿意。

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找dblclick javascript事件。它目前在所有更新的浏览器上都可用。

此处已有帖子:Detect if browser/device supports double click events通过使用超时来检测是否支持它,以检查第一次点击后是否还有其他点击。

答案 1 :(得分:0)

这是我为解决问题而编写的代码:

$.fn.on2 = function(type, sel, handler) {
    this[0].addEventListener(type, function(event) {
        var t = event.target;
        while (t && t !== this) {
            if (t.matches(sel)) {
                handler.call(t, $.event.fix(event));
            }
            t = t.parentNode;
        }
    }, true);
}

var clickEvents = [];
$(document).on2('click', 'a', function (event) {
    if (event.altKey || event.ctrlKey || event.shiftKey || this.text.length == 0) {
        return;
    }
    clickEvents.push(event);

    if (event.originalEvent.isTrusted) {
        event.preventDefault();
        event.stopImmediatePropagation();
    }

    var target = this;
    if (1 === clickEvents.length) {
        setTimeout(function () {
            if (2 === clickEvents.length && clickEvents[0].target == clickEvents[1].target) {
                doWhatever(clickEvents[0].target);
            } else {
                clickEvents[clickEvents.length-1].target.dispatchEvent(new MouseEvent("click", clickEvents[clickEvents.length-1].originalEvent));
            }
            clickEvents = [];
        }, 250);
    }
});
相关问题