2013-03-13 80 views
0

我發現在JavaScript的代碼,我想知道,如果這是一種黑客攻擊,或只是一個錯誤:這是什麼JavaScript黑客?

var img = new Image(); 
img.src = myHttpSrc; 
img.onload = function() { 
    img.onload = null; 
}; 
+1

它似乎很多餘,但我不知道我們怎麼能知道沒有任何上下文... – Jace 2013-03-13 10:36:14

+3

那麼,至少,它有一個競爭條件。 (是的,真的。)如果圖像處於緩存中,則在下一行代碼運行之前,瀏覽器可能會在設置「src」後立即觸發'load'事件。 (因爲儘管瀏覽器中的JavaScript是單線程的 - 除非你使用web worker - 瀏覽器本身*不是*。它可以高興地觸發事件,看到沒有掛鉤的處理程序,所以不會將它們排隊執行當接下來的JavaScript線程成爲可用時)。 – 2013-03-13 10:37:01

+0

更多的上下文:這是一個綁定到鏈接的「onclick」事件的函數。該函數總是'返回true'。 – KwiwaA 2013-03-13 10:44:57

回答

1

代碼似乎從myHttpSrc加載圖像。有一個onload的事件處理程序,它將在加載時觸發。一旦加載完成,處理程序也會自行刪除。

這不是破解,但由於onload處理程序除了自行刪除之外沒有其他任何操作,所以看起來多餘。

0

只是爲了擴大一點Kami的答案,這可能是必要的一個可能的情況是,也許在代碼中的其他地方,他們檢查img.onload是否爲空 - 也許作爲一種方式來檢查是否或不是沒有使用布爾值加載圖像。

這聽起來很不理想,有點古怪,但嘿,這是可能的。

這就是我的觀點:在沒有給出這個代碼的上下文的情況下,沒有人能夠知道這是否是黑客或錯誤。

如果你需要需要才能知道答案:問問編寫代碼的人。