2009-12-19 40 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.另一种选择是保留现有脚本(如果它已经在文档中)。如果在页面重新加载之间频繁使用书签,这可能会节省一些服务器流量。最糟糕的情况是某人正在使用较旧版本的脚本一段时间;如果你不指望它经常改变,那可能没问题。

相关问题