Как стать автором
Обновить

Комментарии 15

это вопрос для тематического форуме скорее всего…
Если интересует именно указанная реализация, то проблемы две:
1. использование синхронного XHR — страницы с множеством «инклюдов» будут тупить в браузерах пользователей.

2. невозможность загрузки «инклюдов» с доменов, отличных от домена страницы.

3. eval — кака :-)
Лучше все писать в один файл и отдавать его, не забывая сжимать. При таком варианте возможна загрузка избыточного кода, но в целом выходит быстрее чем подгружать мелкие файлы.
Я писал инклюд, но только созданием элемента script и аттач его к head.
А я инклюдил еще «тупее»:
document.write('<' + 'script'…

Я понимаю, что это «немного неправильно», но в принципе работает во всех браузерах, что тогда были под рукой.
document.write() — это, малость, небезопасно, на сколько я знаю (What Happened to Operation Aborted? (MSDN).
Одно время намучились же мы с этим. >))
Сафари 2 это не прожевывает. Выдержка из кода scriptacluous.js:
// inserting via DOM fails in Safari 2.0, so brute force approach
document.write('<script type="text/javascript" src="'+libraryName+'"><\/script>')
Также метод инклюда посредствам вот такой ↑ записи плох в случаи загрузки в рунтайм — Lazy initialization (когда код нам нужен прямо сеичас, в данной строке скрипта, а не когда браузер его загрузит)
Как реализацию паттерна Lazy initialization в JS я использую идею unsure в ней идет синхронный XHR со списком скриптов для загрузки — все возвращается в сжатом GZ или/и упаковынным packer'ом одном скрипте, так что затраты времени минимальны. Затем весь код включаю через document.write или через script или evalScripts, смотря какой барузер.
В body надо script аттачить, потому как сафари / webkit и IE6 проигнорят вставку элемента в head. Код, работающий под FF, IE, Opera, Safari, Konqueror, Google Chrome:

function include(src) {
var s = document.createElement(«script»);
s.setAttribute(«src», src);
document.getElementsByTagName(«body»)[0].appendChild(s);
}

Если бы не Ослик и Konqueror, можно было бы короче:

document.getElementsByTagName(«body»)[0].appendChild(document.createElement(«script»)).setAttribute(«src», src);

почти тоже самое, но head было. Не помню когда этот скрипт писал, но вроде в тех броузерах что надо было — работало (внутренняя разработка).
К сожалению, такая реализация не отвечает требованию «подключить файл сразу», так как в FF и IE подключенный код будет выполнен после кода страницы. Этот вариант работает только в Опере. Я думаю, Колесников протестировал разные варианты и остановился на подгрузке кода через ajax только потому, что остальные банально не работали как надо.
потому как сафари / webkit и IE6 проигнорят вставку элемента в head


Так нет же, не игнорят. Ладно, Webkit почти за три года обновился, но и IE6 не игнорит.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Вообще-то имя автора после названия статьи указано чисто из чувства приличия (так же как и ссылка на оригина), не больше и не меньше.

По-поводу (3) вы наверно имели ввиду «чем собственно вот это… _лучше_ вот этого… ?»
Лично мне было бы удобнее в скриптах писать include'ы чем <script>'ы в html (просто личное предпочтение). По остальным пунктам не знал, поэтому и задал вопрос.
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории