如何覆盖默认的 alt-key + click 操作?浏览器进行下载,但是

How to override default alt-key + click action? Browser makes a download, but

通过按 alt 键并单击 url,chrome 进行下载。这是因为浏览器默认的 alt+click 操作。我怎样才能防止这种情况发生?它应该交换 url.

该代码适用于其他键(例如 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;

我认为您需要监听 link 单击事件并检查 event.altKey 属性 而不是监听按键。如果这是防弹与 alt-click 下载,我不是 100%,但它似乎工作。请注意,使用 this.click() 调用 link 仅在它是普通 href 时才有效,没有 javascript 或单击事件。否则还有其他更复杂的方法来完成该部分。

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>

您要求的是更改用户浏览器的默认操作。这不可能。来自浏览器的默认操作不会在 HTML DOM 中 运行,因此无法检测到。