2009-12-19 39 views
5

我正在爲我目前正在編寫的一個項目寫一些書籤,我想知道寫書籤的最佳做法是什麼。我做了一些環顧四周,這是我想出了寫書籤的最佳做法是什麼

javascript:void((function() 
    { 
    var%20e=document.createElement('script'); 
    e.setAttribute('type','text/javascript'); 
    e.setAttribute('src','http://someserver.com/bookmarkletcode.js'); 
    document.body.appendChild(e) 
    })()) 

我覺得這是很好的,因爲代碼總是可以改變(因爲它要求每次),仍然它就像一個書籤。這種方法有什麼問題嗎?瀏覽器不兼容等?最佳做法是什麼?

+0

這篇文章提供了一個書籤模板,它對我來說很好看http://www.latentmotion.com/how-to-create-a-jquery-bookmarklet/ – 2011-07-08 13:07:26

+0

這是我之前使用過的一個替代鏈接。 http://benalman.com/code/test/jquery-run-code-bookmarklet/ – 2013-05-28 09:13:08

回答

3

看起來不錯。但是如果你的js文件已經被緩存了,那麼每次都不會被請求。所以你需要它來追加'?' +新的Date()到你的src屬性,以確保它每次都被請求。

+0

確實。我同意!! – 2009-12-20 05:52:45

7

該書籤將在每次運行時將新的腳本副本附加到文檔中。對於長期存在的頁面(例如Gmail),這可能會增加大量內存使用量,並且如果加載腳本具有副作用,則會多次出現。一個更好的策略是給你的劇本一個id,並且首先檢查該元素是否存在,例如:

var s = document.getElementById('someUniqueId'); 
if (s) { 
    s.parentNode.removeChild(s); 
} 
s = document.createElement('script'); 
s.setAttribute('src', 'http://example.com/script.js'); 
s.setAttribute('type', 'text/javascript'); 
s.setAttribute('id', 'someUniqueId'); 
document.body.appendChild(s); 

N.B.另一種選擇是保留現有腳本(如果它已經在文檔中)。如果在頁面重新加載之間頻繁使用書籤,這可能會節省一些服務器流量。最糟糕的情況是某人正在使用較舊版本的腳本一段時間;如果你不指望它經常改變,那可能沒問題。

相關問題