Использовать javascript для перехвата всех кликов ссылки на документы
как перехватить ссылки в документе?
он должен быть кросс-платформенным.
Я ищу что-то вроде этого:
// content is a div with innerHTML
var content = document.getElementById("ControlPanelContent");
content.addEventListener("click", ContentClick, false);
function ContentClick(event) {
if(event.href == "http://oldurl")
{
event.href = "http://newurl";
}
}
Заранее благодарим за помощь.
Ответы
Ответ 1
for (var ls = document.links, numLinks = ls.length, i=0; i<numLinks; i++){
ls[i].href= "...torture puppies here...";
}
альтернативно, если вы просто хотите перехватить, а не изменить, добавить обработчик onclick. Это вызовет вызов до перехода к URL-адресу:
var handler = function(){
...torment kittens here...
}
for (var ls = document.links, numLinks = ls.length, i=0; i<numLinks; i++){
ls[i].onclick= handler;
}
Обратите внимание, что document.links
также содержит элементы AREA
с атрибутом href
- не только элементы A
.
Ответ 2
Как насчет того, когда ссылки создаются во время использования страницы? Часто это происходит с более сложными передними рамками.
Правильное решение, вероятно, заключалось бы в том, чтобы добавить в документ прослушиватель событий щелчка. Это происходит потому, что события на элементах распространяются на родителей и потому, что на самом деле на ссылку действует самый верхний родитель.
Это будет работать для всех ссылок, независимо от того, загружается ли страница или динамически создается на передней панели в любой момент времени.
function interceptClickEvent(e) {
var href;
var target = e.target || e.srcElement;
if (target.tagName === 'A') {
href = target.getAttribute('href');
//put your logic here...
if (true) {
//tell the browser not to respond to the link click
e.preventDefault();
}
}
}
//listen for link click events at the document level
if (document.addEventListener) {
document.addEventListener('click', interceptClickEvent);
} else if (document.attachEvent) {
document.attachEvent('onclick', interceptClickEvent);
}
Ответ 3
Я только что нашел это, и это может помочь некоторым людям. В дополнение к перехвату, если вы хотите запретить ссылку для загрузки другой страницы или перезагрузки текущей страницы. Просто установите href как '#' (как в префиксе внутренней ссылки страницы). Теперь вы можете использовать ссылку для вызова функции во время пребывания на той же странице.