2016-06-30 11 views
0

Ich versuche, ein Pop-up zu machen, das den Benutzer daran hindert, zur resultierenden Seite zu gehen, wenn sie abbrechen. Dieser Code funktioniert in Chrome, Safari, Opera, Microsoft Edge und Internet Explorer 11, nicht jedoch in Firefox.Javascript stopPropagation/cancelBubble/preventDefault woking nicht in Firefox

function leavingAlert(){ 
var check = confirm("You are about to leave the site! You may be going to a website that doesn't provide security. Do you wish to continue?"); 
if(check){ 
this.target="_blank" 
    return true;  
}else{ 
event.cancelBubble = true; 

    return false; 
} 
} 
//WORKING FOR ALL NON-IFRAME LINKS 
var container = document.getElementById("wrapper"); 
var allATags = wrapper.getElementsByTagName("A"); 


for(var i = 0, len = allATags.length; i < len; i++){ 
    var link = allATags[i]; 
    //var pat = /^https?:\/\//i; 
    var pat = new RegExp("https://example.com"); 
    var pat2 = new RegExp("javascript"); 
    if(!pat.test(link.href)){ 
     if(!pat2.test(link.href)){ 
      link.onclick = leavingAlert; 

     } 
    } 

} 

Ich habe auch diese statt event.cancelBubble ohne Glück:

event.preventDefault ? event.preventDefault() : event.returnValue = false; 

und

event.stopImmediatePropagation; 

und

event.stopPropagation; 

Wo ich das bin der Umsetzung Code Ich kann jQuery derzeit nicht verwenden also eine antwort in plain Javascript wäre bevorzugt danke!

Antwort

0

Die Verwendung von event als globale Variable ist kein Standard-Javascript, und es ist nicht in Firefox implementiert. Es sollte als Argument für den Handler onclick zugegriffen werden.

function leavingAlert(event){ 
    var check = confirm("You are about to leave the site! You may be going to a website that doesn't provide security. Do you wish to continue?"); 
    if(check){ 
     this.target="_blank"; 
     return true;  
    }else{ 
     event.cancelBubble = true; 

     return false; 
    } 
} 
+0

Ich hatte nur ein paar Fragen zu lesen und kam zu dem gleichen Schluss , hat es getestet und es hat funktioniert! Super dummer Fehler, das Ereignis einfach aus der Funktionsklammer zu lassen. –

0

Das Problem scheint zu getElementsByTagName („A“) zu werden verwendet, aber in FF die Umsetzung ist case-sensitive

var allATags = wrapper.getElementsByTagName("a"); 
+0

Ich denke du denkst an 'getElementsByTagNameNS'. – Barmar