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

Rit*_*yak 5 javascript bookmarklet cross-browser

我正在为我正在进行的项目编写一些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)
  })())
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*Dee 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);
Run Code Online (Sandbox Code Playgroud)

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


Lee*_*ski 3

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