У меня был букмарклет (и не один, что ужасно), который добавлял к содержимому документа некие скрипты и тут же их вызывал. Раньше (до 2.0.0.2) всё прекрасно работало. Теперь - не работает.

Идея такая. Запускаясь, букмарклет дописывает к <head> некий фрагмент. Потом его вызывает:

Выделить код

Код:

javascript:
(function(){
  function addscript(){
    var js=document.createElement("script");
    js.setAttribute("language","JavaScript");
    js.setAttribute("type","text/javascript");
    js.text="function someactions(){alert('hello');}";
    document.getElementsByTagName('head').item(0).appendChild(js);
  }
  function runscript(){
    someactions();
  }
  addscript();
  runscript();
}
)()

Сейчас происходит такая неприятность: при вызове добавленного скрипта оказывается, что его ещё нет.
Что случилось? Что изменили? И как теперь быть?

делать задержку перед запуском.

Выделить код

Код:

javascript:
(function(){
  var js=document.createElement("script");
  js.setAttribute("language","JavaScript");
  js.setAttribute("type","text/javascript");
  js.text="function someactions(){alert('hello');}";
  document.getElementsByTagName('head').item(0).appendChild(js);
  setTimeout("someactions()", 0);
}
)()

Спасибо. Работает. Честно говоря, я сам бы сообразил, если бы так не запаниковал. Именно таким же образом (через setTimeout) я уже разруливал похожие проблемы (с greasemonkey, ЕМНИП). Дурацкая моя ошибка сейчас была в том, что я в запарке стал писать setTimeout(somefunction(),500); вместо setTimeout("somefunction()",500); - и как результат... :] А-а-а... небо падает! :-)

Спасибо.

Похоже, это баг 371720

Такая же проблема возникла у меня, когда я пытался послать запрос через XMLHttpRequest в начале загрузки страницы. Долго бился, думал что ошибка в скрипте.
Спасает только workaround в виде setTimeout().