Как переопределить действие по умолчанию alt-key + click action?Браузер делает загрузку, но - PullRequest
0 голосов
/ 30 ноября 2018

Нажав клавишу 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 есть интересная статья с кодом запрета, но я его не использую.Спасибо за любую помощь.

evt.preventDefault();
evt.stopPropagation();
return false;

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

То, что вы просите, это изменить действия пользователя по умолчанию в браузере.Это невозможно.Действие по умолчанию из браузера не выполняется в HTML DOM, поэтому его невозможно обнаружить.

0 голосов
/ 30 ноября 2018

Вместо того, чтобы слушать нажатие клавиши, я думаю, что вам нужно прослушать события щелчка по ссылке и проверить свойство event.altKey.Я не на 100%, если это пуленепробиваемый против alt-click загрузки, но, похоже, работает.Обратите внимание, что использование this.click() для вызова ссылки будет работать только в том случае, если это обычный 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>
...