使用window.onbeforeunload避免双击

时间:2016-04-13 05:15:15

标签: javascript

我尝试覆盖window.onbeforeunload以避免在重定向页面时双重提交。

window.onbeforeunload = disableCurrentWindow;
function disableCurrentWindow()
{
    console.log("Before Disable the contents");
    window.document.body.disabled = true;
    console.log("After Disable the contents");
    return undefined;
}

如果我在此处返回true,则会弹出默认确认信息,此刻我不需要。我只需要将用户重定向到下一页。但不需要允许双击

1 个答案:

答案 0 :(得分:0)

如果您想要禁用双提交GET请求,您可以在点击后立即尝试在每个链接中短时间更新href参数。

例如,

var clickedAt = null;
$(document).ready(function() {
    $('a').click(function() {
        if (!clickedAt) {
            console.log('click allowed, destination: ' + $(this).attr('href'));
            clickedAt = new Date();
            $('a').each(function() {
                $(this).attr('data-href', $(this).attr('href'));
                $(this).attr('href', '#');
            });
        }
        else {
            console.log('click masquaraded, destination: ' + $(this).attr('href'));
        }
        return false;
    });
});
setInterval(function() {
    if (typeof $ == 'undefined') return false;
    if (clickedAt && new Date().getTime() - clickedAt.getTime() > 1000) {
        $('a').each(function() {
            $(this).attr('href', $(this).attr('data-href'));
        });
        clickedAt = null;
    }
}, 100);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#data">data</a> <a href="#value">value</a>

但我不认为 - 你应该这样做。在大多数情况下,双击不是问题 - 对于您的Web服务器而言,它不是DDOS(如果您看到,双击会为您的Web服务器带来大量负载 - 您应该重新配置它,因为在生产中模式,任何情况下的加载都会更强大。)

BTW我已经使用data-href来转储旧的href。如果您正在使用这些属性 - 您可以选择另一个缓冲区。

P.S。如果您的页面有很多链接,那么它可以为您的客户做一些非常小的滞后