2012-11-28 37 views
1
<a onclick="dataBounce('http://yahoo.com');" href="http://google.com">Yahoo? :-/</a> 

<script> 
function dataBounce(dest) 
{ 
    // Note: dest is assumed to be encodeURI()ed. 
    var ie = !-[1,]; 

    var bouncer = 'data:text/html;charset=utf-8,%3C%21doctype%20html%3E%3Cscript%3Ewindow.location%20%3D%20%27'+ dest +'%27%3B%3C/script%3E'; 
    console.log('bouncer: ' + bouncer); 
    window.location = !ie ? bouncer : dest; 
    return false; 
} 
</script> 

呀,href是谷歌,但我有一個onclick處理劫持的鏈接上點擊,導航到數據URI其彈跳windowlocation雅虎。 但是,當我點擊鏈接時,我仍然被帶到谷歌。 爲什麼?爲什麼這個鏈接指向谷歌而不是雅虎?

爲什麼我要這樣做?這部分只是一個實驗,部分是我想在實踐中用來保護用戶隱私的一件事:通過創建一箇中間保護頁面,引用者被屏蔽到目標服務器。

這裏的鏈接:

http://jsbin.com/efaful/1

+1

- [1];這是做什麼的? – VoronoiPotato

+0

@VoronoiPotato它檢測到IE ... – wwaawaw

+0

好吧讓我改說,這是如何檢查IE? – VoronoiPotato

回答

11

因爲你需要做的事情onclick防止鏈接的默認行爲後返回false。

<a href="http://google.com" onclick="dataBounce('http://yahoo.com'); return false;" />link</a> 

,或有你dataBounce函數返回false和:

<a href="http://google.com" onclick="return dataBounce('http://yahoo.com');" />link</a> 
+2

不是唯一的方法。 'e.preventDefault();'ftw – GottZ

+1

@MrCode Aww,真糟糕!但是,如果window的'location'發生了變化,並且全新的DOM已經被加載,那麼它是如何進入執行默認動作的階段的呢?當這種情況發生時,現在的JS控制流是不會中止的,從而取消默認行爲? – wwaawaw

+0

@MrCode要我再次刪除我的? ;) –

相關問題