2009-06-27 4 views
1

Unten ist der Code von einem Plugin für Joomla. Es funktioniert auf eigene Faust und hat den Zweck, externe Links auf der Seite zu erkennen und sie mit _blank in neue Browserfenster zu zwingen.Javascript-Problem mit einem globalen externen Link Bestätigungsalarm

Ich habe für eine Stunde versucht (ich weiß nicht Javascript gut), aber ich kann nicht scheinen, herauszufinden, wie man eine Onclick-Funktion funktioniert.

Endergebnis, ich möchte zu diesem Skript die Fähigkeit eines Bestätigungsdialogs hinzufügen, der im 2. Codeabschnitt gezeigt wird.

Wenn Sie auf einen externen Link klicken, wird der Bestätigungsdialog geöffnet, und wenn er "Ja" sagt, können Sie die externe URL in einem neuen Fenster öffnen. Andernfalls bricht es ab und tut nichts.

Wenn ich einen Link mit

onclick="return ExitNotice(this.href);"
in ihm erstellen, funktioniert es perfekt, aber da meine Website mehrere Personen Eingaben sendet, möchte ich das Bestätigungsfeld global.

this.blankwin = function(){ 
    var hostname = window.location.hostname; 
    hostname = hostname.replace("www.","").toLowerCase(); 
    var a = document.getElementsByTagName("a"); 
    this.check = function(obj){ 
    var href = obj.href.toLowerCase(); 
    return (href.indexOf("http://")!=-1 && href.indexOf(hostname)==-1) ? true : false;    
    }; 
    this.set = function(obj){ 
    obj.target = "_blank"; 
    obj.className = "blank"; 
    };  
    for (var i=0;i<a.length;i++){ 
    if(check(a[i])) set(a[i]); 
    };   
}; 

this.addEvent = function(obj,type,fn){ 
    if(obj.attachEvent){ 
    obj['e'+type+fn] = fn; 
    obj[type+fn] = function(){obj['e'+type+fn](window.event);} 
    obj.attachEvent('on'+type, obj[type+fn]); 
    } else { 
    obj.addEventListener(type,fn,false); 
    }; 
}; 
addEvent(window,"load",blankwin); 

Zweiter Teil

/* ---------- 
    OnClick External Link Notice 
---------- */ 
function ExitNotice(link,site,ltext) { 
    if(confirm("-----------------------------------------------------------------------\n\n" + 
    "You're leaving the HelpingTeens.org website. HelpingTeens.org\ndoes not " + 
    "control this site and its privacy policies may differ\nfrom our own. " + 
    "Thank you for using our site.\n\nYou will now access the following link:\n" + 
    "\n" + link + "\n\nPress \'OK\' to proceed, or press \'Cancel\' to remain here." + 
    "\n\n-----------------------------------------------------------------------")) 
    { 
    return true; 
} 
history.go(0); 
return false; 
} 

A) Kann jemand mir helfen, dieses Problem zu beheben? oder B) Gibt es eine bessere Lösung?

+0

Niemand kann Ihnen helfen? – OverDrive

+0

Hey, ich habe diesen Thread gefunden und denke, dass es ziemlich interessant ist. aber leider fehlt die wichtigste Information. Kann xou - OVerdrive - bitte sagen Sie uns, welches Joomla Plugin Sie verwenden? Ich würde das Gleiche brauchen und es nach der Recherche nicht finden können ... vielen Dank. nauck – Nauck

+0

Alles klar, ich habe es selbst gefunden. Das Plugin wird MFBLANK genannt und kann im Joomla Extension Repository unter diesem Link zu finden: http://extensions.joomla.org/extensions/structure-a-navigation/site-links/4266 Vielen Dank auch an den Schöpfer http://Marcofolio.net. Sehen Sie hier auch http://www.marcofolio.net/downloads/joomla/mfblank_for_j_1.5/details.html haben Spaß mit diesem netten GPL Joomla-Plugin ... Sie wollen einen schönen http sehen: // 3d.nauck.eu 3D Webseite? Klicken Sie hier – Nauck

Antwort

0

Also, ich fasse zusammen, was ich denke, dass du fragst und dann sage dir, wie ich denke, dass das gelöst werden kann. Es ist möglich, dass ich deine Frage missverstanden habe.

Sie haben Code, der alle Tags durchläuft und ihr Zielattribut auf "_blank" setzt und ihren className auf "leer" setzt. Stattdessen möchten Sie die Links neu schreiben, um JavaScript zum Anzeigen eines Bestätigungsdialogs zu verwenden und nur zu dem Ort gehen, wenn der Benutzer auf Ja klickt.

In diesem Fall glaube ich Sie über die Links wollen bis beenden, als ob sie wie so geschrieben wurden:

<a href="javascript:void(0)" onclick="if (ExitNotice('http://www.whatever.com')) window.location.assign('http://www.whatever.com')"> 

Die javascript: void (0) bewirkt, dass der normalen Browser Umgang mit dem Klick auf nicht zu gehen eine andere Seite, so dass Ihr onclick Zeit hat, um auszuführen.

Um dies zu ermöglichen, werden Sie die Definition von this.set (innen this.blankwin) zu, so etwas ändern möchten:

this.set = function(obj){ 
    var href = obj.href; 
    obj.href = "javascript:void(0)"; 
    obj.onclick = function() { (if ExitNotice(href) window.location.assign(href); }; 
    obj.target = "_blank"; 
    obj.className = "blank"; 
    }; 

here für Informationen über void Siehe (0).

Beachten Sie auch, dass der Code, der obj.className auf "leer" setzt, nicht groß ist, da es alle anderen Klassennamen entfernt, die der Verknüpfung bereits zugewiesen sind. Sie könnten stattdessen nur den Klassennamen, wie so zu den bestehenden hinzufügen:

obj.className = obj.className + " blank"; 
+0

Ich habe Ihren Code versucht, und es funktioniert nicht und scheint in dieser Zeile zu brechen obj.onclick = function() {(wenn ExitNotice (href) window.location.assign (href);}; Ich habe es geändert, um den Klassennamen zu den vorhandenen auch zu addieren (ich bin kein Javascript-Programmierer, also weiß ich nicht genau, was das tut) Ich bemerke, wenn ich diese Linie kommentieren, tut es Ändere die Links zu javascript: void (0) aber tue nichts sonst. – OverDrive

+0

Alles funktioniert so, wie ich es jetzt will. Danke für deine Hilfe. Da ich SO das erste Mal benutze, hoffe ich, dass ich dir richtig gutgeschrieben habe Ich kann nicht herausfinden, wie (oder sogar wenn es möglich ist) Code in Kommentarboxen anzuzeigen, ich entscheide mich, meine eigene Frage mit dem endgültigen Code zu beantworten, damit andere davon profitieren. – OverDrive

0

Alles funktioniert, wie ich es jetzt möchte. Danke für Ihre Hilfe. Da ich SO das erste Mal benutze, hoffe ich, dass ich dir richtig gutgeschrieben habe. Da ich nicht herausfinden kann, wie (oder sogar wenn es möglich ist) Code in Kommentarboxen anzuzeigen, wähle ich meine eigene Frage mit dem endgültigen Code, damit andere davon profitieren.

Noch einmal, Sie zeigten mir die Syntax, die ich ändern musste, damit es so funktioniert, wie ich es wollte.

DANKE!

Schlusscode

this.set = function(obj){ 
      var href = obj.href; 
      //obj.href = "javascript:void(0)"; 
      obj.onclick = function() { return ExitNotice(href)}; 
      obj.target = "_blank"; 
      obj.className = obj.className + " blank"; 
    }; 
0

ich verfeinert den Code ein bisschen mehr. Bitte überlege, die mfblank.js in den folgenden Inhalt zu ändern. Jetzt ist das ganze Script nur in einer Datei und ein zusätzliches rel = nofollow wird hinzugefügt. Viel Spaß mit diesem Skript ...

this.blankwin = function(){ 
    var hostname = window.location.hostname; 
    hostname = hostname.replace("www.","").toLowerCase(); 
    var a = document.getElementsByTagName("a"); 
    this.check = function(obj){ 
    var href = obj.href.toLowerCase(); 
    return (href.indexOf("http://")!=-1 && href.indexOf(hostname)==-1) ? true : false;    
    }; 
    this.set = function(obj){ 
      var href = obj.href; 
      obj.onclick = function(){ if(confirm("Do you wanne leave this page?")) { 
       return true; 
      } 
       history.go(0); 
       return false; 
      }; 
      obj.target = "_blank"; 
      obj.className = obj.className + " blank"; 
      obj.rel = "nofollow"; 
    }; 
    for (var i=0;i<a.length;i++){ 
     if(check(a[i])) set(a[i]); 
    };  
    }; 
    this.addEvent = function(obj,type,fn){ 
     if(obj.attachEvent){ 
      obj['e'+type+fn] = fn; 
      obj[type+fn] = function(){obj['e'+type+fn](window.event);} 
      obj.attachEvent('on'+type, obj[type+fn]); 
     } else { 
      obj.addEventListener(type,fn,false); 
     }; 
    }; 
    addEvent(window,"load",blankwin); 
Verwandte Themen