编写bookmarklet的最佳实践是什么?

时间:2009-12-19 13:23:05

标签: javascript cross-browser bookmarklet

我正在为我正在处理的项目编写一些bookmarklet,我想知道编写bookmarklet的最佳实践是什么。我做了一些环顾四周,这就是我想出来的

 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)
  })())

我觉得这很好,因为代码总是可以改变(因为它每次都要求)并且它仍然像小书签一样。这种方法有什么问题吗?浏览器不兼容等?这是什么最好的做法?

2 个答案:

答案 0 :(得分:7)

该bookmarklet每次运行时都会将新脚本附加到文档中。对于长寿命页面(例如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。另一种方法是保留现有脚本(如果已存在于文档中)。如果在页面重新加载之间频繁使用书签,则可能会节省一些服务器流量。最糟糕的情况是有人正在使用旧版本的脚本一段时间;如果你不指望它经常改变,那可能没问题。

答案 1 :(得分:3)

看起来不错。但是,如果您的js文件已经缓存,则不会每次都请求它。所以你需要它附加'?' +新的Date()到你的src属性,以确保每次都请求它。