2012-04-08 5 views
1

Wie kann ich alle externe Links mit einem einzigen onmousedown Ereignis neu schreiben?Javascript um alle externen Links auf mousedown umzuschreiben?

Kinda wie das, was Facebooks macht mit seinem Link Shim

Überprüfen Sie bitte das Original Facebook Artikel über den Link Shim: http://on.fb.me/zYAq0N

Anforderungen:

  • Sollte arbeiten alle Subdomains auf mainsite.com.

  • Sollte example.com Umleitung zu mainsite.com/link.cgi?u=http://example.com

  • nur Links umleiten sollte nicht zu mainsite.com gehört.

Verwendung:

Dies ist für die Sicherheit der Benutzer von einem privaten Web-App und Referrer zu schützen.

Am besten für eine gute UI wie im FB-Artikel erwähnt.

das so ist, wenn Benutzer über einige Link schwebt zeigt es den richtigen Link, aber wenn er es klickt, js leitet es

Dank my.site.com/link.cgi=http://link.com in vorzurücken

GELÖST: https://gist.github.com/2342509

+0

kein Übel, es ist meine Nutzer zu schützen, auf meiner Web-App von externen Websites. –

+1

Dann schreiben Sie einfach die Links vollständig neu, damit der Benutzer sehen kann, wohin sie beim Schweben gebracht werden. Warum zeigen Sie ihnen X, sondern bringen Sie sie zu Y. Das ist Täuschung. – jfriend00

+0

wie Sie in der FB Artikel sehen können ich verlinkt, für gute UI, im laufenden Betrieb meine Umleitung wird nur meine Benutzer stoppen, wenn Website mit Malware betrachtet wird, werden wir die Safebrowsing API von Google für den Endpunkt verwenden: –

Antwort

5

Für einen einzelnen Link:

function $(id){ return document.getElementById(id); } 
$(link).onclick = function(){ this.href = "http://otherlink.com"; } 

<a href="http://example.com" id="link">My Sheisty Link</a> 

So zu erhalten alle externen Links:

window.onload = function(){ 
var links = document.getElementsByTagName("a"); 
for(a in links){ 
    var thisLink = links[a].href.split("/")[2]; 
    if(thisLink !=== window.location.hostname){ 
    links[a].href = "http://mainsite.com/link.cgi?u=" + links[a]; } 
    // Or you could set onclick like the example above 
    // May need to accommodate "www" 
}} 

Edit:
gefunden this answer und bekam eine bessere Idee.

document.onclick = function (e) { 
e = e || window.event; 
var element = e.target || e.srcElement; 

if (element.tagName == 'A') { 
var link = element.href.split("/")[2]; 
    if(link !=== window.location.hostname){ 
    links[a].href = "http://mainsite.com/link.cgi?u=" + links[a]; } 
    return false; // prevent default action and stop event propagation 
    }else{ return true; } 
}}; 
+0

Danke Mann .. !! Ich habe eine schöne JS-Klasse aus Ihrem Code erstellt: https://gist.github.com/2342509 –

1

Wenn Sie jQuery verwenden dann funktioniert das folgende

$('a:link').mousedown(function() { 
    this.href = 'http://my.site.com/link.cgi=' + this.href; 
}); 

Ansonsten

var anchors = document.getElementsByTagName('a'); 
for(var i = 0; i < anchors.length; i++) { 
    var a = anchors[i]; 
    if(a.href) { 
    a.addEventListener('mousedown', function(e) { 
     this.href = 'http://my.site.com/link.cgi=' + this.href; 
    }, false); 
    } 
} 
Verwandte Themen