Comments 25
ну пипец, умно
-1
молодец!
-2
Спасибо!
-1
просто интересно: нахрена if(typeof s != 'object')?
0
кроссбраузерность наверно
0
Кроссбраузерность + это короче, чем:
d.standardCreateElement ? d.standardCreateElement('script') : d.createElement('script');
d.standardCreateElement ? d.standardCreateElement('script') : d.createElement('script');
0
Вообще это для некоторых особо умных сайтов.
0
В IE6 есть нехорошее ограничение на длину кода букмарклета.
0
М.б. тогда попробывать:
s = d.createElement('script') || d.standardCreateElement('script');
?
s = d.createElement('script') || d.standardCreateElement('script');
?
+1
Дело в том, что createElement перекрывается некоторыми сайтами для того, чтобы туда ничего не подгружали. Функция может чего-нибудь и вернуть…
0
Логично предположить. Тогда
s = (d.standartCreateElement || d.createElement)('script');
?
s = (d.standartCreateElement || d.createElement)('script');
?
+1
и еще один вариант :)
Тут d.createElement('script') нужен только для страниц где нет ни одного script. Помоему таких не много :) потому можно обойтись и вариантом только с getElementsByTagName/cloneNode. Ну и еще немного поиздеваться над кодом :)
var d = document, s = (d.getElementsByTagName('script')[0] || d.createElement('script')).cloneNode(true);
s.src = 'http://example.com/js/bookmarklet.js';
s.type = 'text/javascript';
d.body.appendChild(s);
Тут d.createElement('script') нужен только для страниц где нет ни одного script. Помоему таких не много :) потому можно обойтись и вариантом только с getElementsByTagName/cloneNode. Ну и еще немного поиздеваться над кодом :)
(s = (d = document).getElementsByTagName('script')[0].cloneNode(true)).src = 'http://example.com/js/bookmarklet.js';
s.type = 'text/javascript';
d.body.appendChild(s);
+2
Кстати, если кто знает как улучшить или уменьшить код — не стесняйтесь…
0
В общем кто знает что такое доры будут очень довольны :) зы "чужие" стили таким же образом добавляются
0
все писатели букмарклетов такое используют
короче тоже можно сделать: забить на setAttribute, и нормально присваивать атрибуты напрямую: s.src='...'
getElementsByTagName работает не очень шустро, а скрипты можно в любое место страницы вставлять, поэтому проще (и короче) будет d.body.appendChild()
и w = window вы тоже не используете, сотрите ; )
короче тоже можно сделать: забить на setAttribute, и нормально присваивать атрибуты напрямую: s.src='...'
getElementsByTagName работает не очень шустро, а скрипты можно в любое место страницы вставлять, поэтому проще (и короче) будет d.body.appendChild()
и w = window вы тоже не используете, сотрите ; )
+2
Один аспект - что произойдет, если страница еще не загружена, DOM не построен (к примеру, один из тучи банеров подтормаживает), а мы вызываем body.appendChild? Правильно - ошибка ;)
По-уму надо юзать что-то вроде body.insertBefore(scriptElement, body.firstChild), или добавлять линк в head, где проблем с построением DOM'а не возникнет
По-уму надо юзать что-то вроде body.insertBefore(scriptElement, body.firstChild), или добавлять линк в head, где проблем с построением DOM'а не возникнет
0
Sign up to leave a comment.
Букмарклет, подгружающий внешний скрипт