Frage

Unten ist der Code aus einem Plugin für Joomla. Es arbeitet auf seine eigene, und es ist Zweck externe Links auf der Seite zu erkennen ist und zwingen, in einem neuen Browser-Fenster _blank verwendet wird.

Ich habe etwa eine Stunde lang versucht, (ich weiß nicht javascript gut kennen), aber ich kann nicht scheinen, um herauszufinden, wie man eine Onclick-Funktion Funktion erhalten.

Ende Ergebnis mag ich dieses Skript die Fähigkeit eines Bestätigungsdialogs an, in dem zweiten Codeabschnitt gezeigt.

Ein externer Link, wenn darauf geklickt wird, wird der Bestätigungsdialog öffnet sich, und wenn es ja sagt, werden sie in der Lage sein, an die externe URL zu erhalten, öffnen in einem neuen Fenster. Ansonsten ist es bricht, und tut nichts.

Wenn ich einen Link mit

onclick="return ExitNotice(this.href);"
innerhalb sie schaffen es funktioniert perfekt, aber da meine Website mehrere Personen einreichen Eingang hat, würde ich das Bestätigungsfeld global mögen.

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?

War es hilfreich?

Lösung

Also, werde ich zusammenfassen meint, was ich denke, Sie fragen, und dann sagen, wie ich denke, das gelöst werden kann. Es ist möglich, dass ich Ihre Frage falsch verstanden haben.

Sie haben Code bekommen, die durch alle Tags geht und setzt ihr Zielattribut auf „_blank“ und setze ihren Klassennamen auf „leer“, und Sie mögen stattdessen die Links umschreiben JavaScript zu verwenden, um einen Bestätigungsdialog zu zeigen, und geht nur an den Ort, wenn der Benutzer klickt auf Ja.

In diesem Fall glaube ich Ihnen 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 die normale Browser Handhabung des Klick nicht auf eine andere Seite zu gehen, so dass Ihre Onclick Zeit auszuführen hat

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

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

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

Beachten Sie auch, dass der Code, obj.className auf „leer“ ist nicht groß setzt, weil es anderen Klassennamen bereits auf den Link zugewiesen entfernen. Sie könnten stattdessen fügen Sie einfach den Namen der Klasse zu den bestehenden, etwa so:

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

Andere Tipps

Alles funktioniert, wie ich es jetzt möchte. Danke für deine Hilfe. Da dies mein erstes Mal mit SO, ich hoffe, dass ich Dich richtig gutgeschrieben. Da ich nicht herausfinden kann, wie man (oder auch wenn es möglich ist) Code in Kommentarfeldern zu zeigen, Ich wähle meine eigene Frage mit dem endgültigen Code zu beantworten, für andere zu profitieren.

Wieder einmal zeigte man mir die Syntax ich es ändern zu erhalten benötigen die Art und Weise arbeitet ich wollte.

DANKE!

Endgültiger Code

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

Ich verfeinerte den Code ein bisschen mehr. Bitte beachten Sie die mfblank.js in folgendem Inhalt zu verändern. So, jetzt alle das Script in einer Datei nur und eine zusätzliche rel = nofollow hinzugefügt wird. 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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top