2012-04-08 11 views
1

すべてを書き換えるにはどうすればいいですか外部リンク onmousedownイベントは1回だけですか? http://on.fb.me/zYAq0Nmousedownのすべての外部リンクを書き換えるJavascript?

要件:

  • がために働くべき

    ちょっとそれはリンクシム

    だとfacebooksが何をするか、リンクシムについて、元Facebookの記事を確認してくださいのようなmainsite.comのすべてのサブドメイン

  • のみmainsite.comに属していないリンクをリダイレクトする必要があり mainsite.com/link.cgi?u=http://example.com

  • にexample.comをリダイレクトする必要があります。

用途:

これは民間のWebアプリケーションのユーザーのセキュリティのためのものであり、参照元を保護するために。

FBの記事で指摘されているように、優れたUIを実現するのに最適です。

ので、ユーザーは、いくつかのリンクの上に置いたときに、それは正しいリンクを示していますが、彼はそれをクリックしたときに、JSは中

感謝をmy.site.com/link.cgi=http://link.comにリダイレクトしています

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> 

そうに:個々のリンクについてhttps://gist.github.com/2342509

+0

なし悪を働くだろう、それが外部サイトから、私のWebアプリ上で、私のユーザーを保護することです。 –

+1

次に、リンクを完全に書き直すだけで、ユーザーはカーソルを置いたときにどこで撮影されるのかを見ることができます。なぜそれらをXに見せても、Yに連れて行ってください。それは詐欺です。 – jfriend00

+0

FBの記事でわかるように、良いUIのために、私のリダイレクトはサイトがマルウェアであるとみなされた場合にのみユーザーを止めるでしょう。私たちはエンドポイントのgoogleからsafebrowsing apiを使用します: –

答えて

5

を解決し進めます

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

編集:
見つかりthis answerを、より良いアイデアを得たすべての外部リンクを取得。あなたはjQueryのを使用している場合

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

ありがとうございました.. !!あなたのコードから素敵なJSクラスを作成しました:https://gist.github.com/2342509 –

1

その後、次のことが

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

そうでない場合

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); 
    } 
} 
関連する問題