2009-12-19 2 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/ –

+0

Вот альтернативная ссылка, которую я использовал раньше. http://benalman.com/code/test/jquery-run-code-bookmarklet/ –

ответ

3

Выглядит хорошо. Но если ваш js-файл уже кэширован, он не будет запрашиваться каждый раз. Так что вам нужно будет добавить '?' + new Date() в ваш атрибут src, чтобы гарантировать, что он запрашивается каждый раз.

+0

Правда. Согласен!! –

7

Этот букмарклет будет прикладывать новую копию сценария к документу каждый раз, когда он запускается. Для долговечных страниц (например, Gmail) это может привести к большому объему использования памяти, и если загрузка скрипта будет иметь побочные эффекты, они будут выполняться несколько раз. Лучшей стратегией было бы дать вашему сценарию идентификатор и, прежде всего, проверить наличие этого элемента, например:

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. Другой альтернативой является сохранение существующего скрипта, если он уже находится в документе. Это может сэкономить некоторый трафик сервера, если ваш букмарклет часто используется между перезагрузкой страницы. Хуже всего то, что кто-то использует старую версию вашего скрипта какое-то время; если вы не ожидаете, что он изменится часто, это может быть хорошо.

Смежные вопросы