Использовать 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 как '#' (как в префиксе внутренней ссылки страницы). Теперь вы можете использовать ссылку для вызова функции во время пребывания на той же странице.