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

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

4

2 回答 2

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);

注意另一种选择是保留现有脚本,如果它已经在文档中。如果您的书签在页面重新加载之间频繁使用,这可能会节省一些服务器流量。最坏的情况是有人在一段时间内使用旧版本的脚本;如果您不希望它经常更改,那可能没问题。

于 2010-03-26T17:07:57.000 回答
3

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

于 2009-12-19T23:25:15.097 回答