2012-04-08 40 views
1

如何將所有外部鏈接重寫爲單個onmousedown事件?Javascript重寫mousedown上的所有外部鏈接?

有點像什麼Facebook的與它的連接墊片

請查看關於鏈接墊片原Facebook的文章: http://on.fb.me/zYAq0N

要求:

  • 應該工作mainsite.com上的所有子域名。

  • 應該重定向的example.com mainsite.com/link.cgi?u=http://example.com

  • 應該只重定向不屬於mainsite.com鏈接。

用途:

這是一個私人的web應用程序的用戶的安全,並保護引薦。

正如FB文章中指出的那樣,最好在飛行中完成良好的用戶界面。

這是如此,當用戶將鼠標懸停在某個環節它顯示了正確的鏈接,但是當他點擊它,JS重定向它my.site.com/link.cgi=http://link.com在

謝謝推進

解決https://gist.github.com/2342509

+0

沒有邪惡,這是爲了保護我的用戶,我的web應用程序,從外部網站。 – 2012-04-08 14:25:11

+1

然後,只需完全重寫鏈接,以便用戶在懸停時可以看到他們將要採取的行動。爲什麼向他們展示X,但把他們帶到Y.這是欺騙。 – jfriend00 2012-04-08 14:26:12

+0

正如你可以在FB文章中看到的,我鏈接了良好的UI,在飛行中我的重定向只會阻止我的用戶,如果站點被認爲是惡意軟件,我們將使用谷歌的安全瀏覽API作爲端點: – 2012-04-08 14:27:55

回答

5

對於個人鏈接:

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> 

所以要得到的所有外部鏈接:

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和有更好的主意。

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 – 2012-04-09 09:34:14

1

如果你使用jQuery那麼下面的工作

$('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); 
    } 
} 
相關問題