如何覆盖默认的Alt键+单击操作?浏览器进行下载,但是

时间:2018-11-30 19:52:56

标签: javascript google-chrome browser keyboard-shortcuts

通过按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;

2 个答案:

答案 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中运行,因此无法检测到。