Какова лучшая практика для записи bookmarklets

Я пишу некоторый bookmarklets для проекта, что я в настоящее время продолжаю работать, и я задавался вопросом, какова лучшая практика для записи 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)
  })())

Я чувствовал, что это хорошо, потому что код может всегда изменяться (начиная с его требуемого каждый раз), и тем не менее он действует как bookmarklet. Есть ли существуют какие-либо проблемы к этому подходу? Несовместимость браузера и т.д.? Какова лучшая практика для этого?

5
задан Ritesh M Nayak 19 December 2009 в 13:23
поделиться

2 ответа

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

3
ответ дан 13 December 2019 в 22:09
поделиться

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

7
ответ дан 13 December 2019 в 22:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: