通过按alt键并单击url,chrome会进行下载。这是由于浏览器的默认alt + click动作。我该如何预防?它应该交换网址。
该代码与其他键(例如x == 88)一起使用,其中浏览器没有默认操作。但是如何使用alt键呢?
//ALT-key recognition
document.onkeydown=function(){
var keyCode = event.keyCode;
if(keyCode == 18) //alt-key
{
console.log(keyCode);
document.getElementById("hist").setAttribute ('href', "history_by-date.php?wdate=all");
}
}
<div id="history">
<a href="history_by-date.php?wdate=2018&until=2017" id="hist" target="_self" class="a2">should be just a link - not a download (when alt is pressed)</a>
</div><!-- end history -->
这里的另一个用户skyline3000有一个有趣的article,带有阻止代码,但我认为它无法正常工作。感谢您的帮助。
evt.preventDefault();
evt.stopPropagation();
return false;
答案 0 :(得分:1)
我认为您无需监听按键,而需要监听链接单击事件并检查event.altKey属性。如果这是防弹vs alt单击下载,我不是100%,但它似乎可以工作。请注意,只有在普通href,无JavaScript或click事件的情况下,使用this.click()
来调用链接才有效。否则,还有其他更复杂的方法可以做到这一点。
document.querySelectorAll('a').forEach(a => {
a.addEventListener('click', function (e) {
if (e.altKey) {
e.preventDefault(); // no download
this.href = 'history_by-date.php?watchdate=all';
this.click(); // fake a normal click
}
});
});
<a href='http://example.com'>alt-click me</a>
答案 1 :(得分:0)
您要的是更改用户浏览器的默认操作。这是不可能的。浏览器的默认操作不会在HTML DOM中运行,因此无法检测到。