Vraag gebruik javascript om alle klikken op documentkoppeling te onderscheppen


hoe onderschep ik linkklikken in een document? het moet platformoverschrijdend zijn.

Ik ben op zoek naar zoiets als dit:

// 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";
  }
} 

Alvast bedankt voor hulp.


13
2018-01-25 23:21


oorsprong


antwoorden:


for (var ls = document.links, numLinks = ls.length, i=0; i<numLinks; i++){
    ls[i].href= "...torture puppies here...";
}

of als je alleen maar wilt onderscheppen, niet veranderen, voeg dan een onclick-handler toe. Dit wordt gebeld voordat u naar de URL navigeert:

var handler = function(){
    ...torment kittens here...
}
for (var ls = document.links, numLinks = ls.length, i=0; i<numLinks; i++){
    ls[i].onclick= handler;
}

Let daar op document.links bevat ook AREA elementen met een href kenmerk - niet alleen A elementen.


19
2018-01-25 23:27



Hoe zit het met het geval dat de links worden gegenereerd terwijl de pagina wordt gebruikt? Dit komt vaak voor met de complexere front-end frameworks van vandaag.

De juiste oplossing zou waarschijnlijk zijn om de clickevent-luisteraar op het document te plaatsen. Dit komt omdat gebeurtenissen op elementen zich naar hun ouders voortplanten en omdat een koppeling daadwerkelijk wordt uitgevoerd door de meest bovenliggende ouder.

Dit werkt voor alle links, ongeacht of ze met de pagina zijn geladen, of op elk moment dynamisch aan de voorkant worden gegenereerd.

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);
}

16
2017-11-09 19:45



Ik heb dit net ontdekt en het kan sommige mensen helpen. Naast onderschepping, als u de koppeling niet wilt toestaan ​​om een ​​andere pagina te laden of de huidige pagina opnieuw te laden. Stel gewoon de href in op '#' (zoals in het voorvoegsel van de interne pagina ref). Nu kunt u de link gebruiken om een ​​functie te bellen terwijl u op dezelfde pagina blijft.


3
2017-10-08 09:06