У меня есть HTML-страница с несколькими ссылками. Есть ли возможность поймать событие открытия ссылки? Пользователи могут просто нажать ссылку или открыть ее в новом окне или вкладке, щелкнув правой кнопкой мыши.
Ссылки ссылаются на внешние ресурсы, и я не могу контролировать его содержимое.
Есть несколько вариантов клиентской стороны, о которых я могу думать, ни один из которых не идеален:
Вы можете заменить ссылку href
на javascript:
url, который запускал любой код, который вы хотели, а затем перешел на правильный URL (location.href= "http://example.com"
). Это неприятно, так как он ломается, если пользователь делает правую кнопку мыши → новую вкладку или отключен JavaScript.
Вы можете добавить прослушиватель событий в событие щелчка <a>
. Но это не будет вызвано щелчком правой кнопки мыши → открыть, или пользователь перейдет на вкладку и нажав клавишу ввода.
Вы можете использовать onunload
события onunload
самого документа, но это не скажет вам, куда идет пользователь, и не будет работать, если пользователь открыл новую вкладку.
Если вы просто хотите отслеживать, куда идут ваши пользователи, тогда решение на стороне сервера является единственным надежным способом. Вам нужно будет отправить пользователей на свой собственный сервер, который, в свою очередь, отправит код HTTP 302 для перенаправления браузера на правильный URL. Разумеется, это потребует больше инфраструктуры, чем вам может понадобиться.
a:visited { display: none; }
Это будет продолжаться в течение нескольких сеансов, которые вы можете или не можете хотеть. Кроме того, я не уверен, как режимы конфиденциальности различных браузеров могут повлиять на это, так как проверка :visited
- это (немного неловкий) способ узнать историю пользователя.
Да, вы можете использовать javascript, чтобы сделать что-то вроде...
$('a').click(function(){
event.preventDefault();
$(this).alert("do something");
});
пытаться
var links = document.getElementsByTagName('a');
for(var i = 0; i< links.length; i++) {
links[i].onmousedown = function(e) {
console.log(this.href, this)
if ((e.which && e.which == 3) || (e.button && e.button == 2)) { // not sure about IE
alert('right click');
}
}
}