我尝试覆盖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,则会弹出默认确认信息,此刻我不需要。我只需要将用户重定向到下一页。但不需要允许双击
答案 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。如果您的页面有很多链接,那么它可以为您的客户做一些非常小的滞后