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

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

позвольте ламерский вопрос:
а что значит «когда страница загружена»? Как определяется, что страница загружена?
Я полагаю, после отработки события onLoad?
Если не ошибаюсь, страница считается загруженной, когда браузер получил ее код от сервера целиком и построил по нему DOM. Пользователь может отследить этот момент, как правильно сказал Vindicar, по событию onLoad, или с помощью более удобного синтаксиса у jQuery.
То, что вы описали — это DOMContentLoaded, событие Load срабатывает при полной обработке всех ресурсов страницы. Однако, в таких ненормальных условиях, как наличие document.write непосредственно в script-теге, возможно существует и какое-то иное поведение.
События, происходящие до полной загрузки страницы.
image

полезно еще знать, что есть document.close(), который по-хорошему стоит вызывать после document.write, иначе некоторые браузеры будут показывать крутилку «загрузки».
Если я правильно понял, то document.close(); актуально только при создании дочерних окон и выполнении document.write в контексте нового окна. Так?
В моём случае это наблюдалось с src-less iframe (тобишь да, дочерним окном), но я без понятия, ограничивается ли явление только такими сценариями.

Оригинальная статья какого года? У меня первая ассоциация: "школьник 21 века и кассетный плеер". Я так стар? Уже выросло поколение, не заставшее эпоху, когда половина сайтов работала на это хреновине?

Половина энтерпрайза все еще использует document.write, некоторые даже в относительно новых продуктах. Все зависит от того, какой ответ нагуглился и заработал первым у «талантливого» offshore разработчика.
Я застал сайт, делавший document.write("<br>"); по числу нужных br'ов. Прошли годы. но я до сих пор не понимаю смысла так делать (в попавшем в руки этом коде просто заменил их на <br> ибо короче, а модемы бывали и на 2400).
> Существует ли нормальный повод применять document.write?
> Я о таком не слышал.

А как же что-то типа этого?
<script src="//ajax.aspnetcdn.com/ajax/jquery/jquery-2.0.0.min.js"></script>
<script>window.jQuery || document.write('<script src=«js/jquery-2.0.0.min.js»>\x3C/script>')</script>

Поговаривают что некоторые программисты пользуют document.createElement('script') — врут наверное.

По вашей же ссылке лучший ответ:

You can't do it synchronously.


И следующий ответ советует использовать document.write.

А зачем вам это делать synchronously? Какая объективная причина может быть для этого?

НЛО прилетело и опубликовало эту надпись здесь

если сторонний скрипт или легаси — то да, может быть, но в своем коде — то проверяться надо и предохраняться. Зависимостей может не быть по многим причинам.

НЛО прилетело и опубликовало эту надпись здесь

Использую, зачем вы из меня плюшевого мишку делаете? Дискуссия развернулась с вот этой фразы — "Существует ли нормальный повод применять document.write?". ПОВОД! Не нужда.

НЛО прилетело и опубликовало эту надпись здесь
Извиняюсь за немного резкую фразу.

Принято )


Как- то не отделяю данные понятия. Нужда даёт повод.

Ну как же? "А как бы нам тут приспособится к этой гребаной либе, которая использует :"№%%:? Да, придется делать document.write." Это нужда.
"А как бы нам тут document.write поиспользовать. Очень хочется, есть где?" Это поиск повода.
Так вот поводов использовать document.write — нет, язык развился, DOM развился, есть нормальные инструменты, закопайте стюардессу.

НЛО прилетело и опубликовало эту надпись здесь
>> * Под «до бесконечности» подразумевается 20 раз.

Автор статьи, видимо, раньше в рекламе работал?
Применял document.write() именно на этапе загрузки страницы, в зависимости от UserAgent. А далее уже подгружаемый фрейворк разобрал «вписанную» структуру по своим правилам. И всё в одном html файле, без внешних зависимостей и т.п. Помоему довольно удобно.
Существует ли нормальный повод применять document.write?

wnd=window.open('...');
wnd.document.open('....');
wnd.document.write('....');
«Существует ли нормальный повод применять document.write?» Как-то делал фан-сайт игры основной функциональностью которого было показывать логи. Т.е. информация однотипна, уникальной информации мало, и большую часть составляет статистика вычисленная на основе базовой информации, подсвеченные интересные моменты и т.п. Сначала были static html таблички по мегабайту и больше, но т.к. предполагалось что их должно быть много и храниться должны на сервере чуть ли не вечность переделал html в: и все. А подгружаемый скрипт уже с помощью document.write рисовал всю страницу полностью. В итоге вместо >1Мб html, я получил 100b html + 100kb js (который кэшируется) — неимоверная экономия места на сервере, экономия трафика, и страницы стали загружаться моментально*.

*Под «моментально» имеется в виду время загрузки было меньше времени реакции человека.
Вообще, не совсем «пока страница не загружена».
Когда вызовы идут в основном потоке загрузки, то пишется в этот поток.
Но, например:

setTimeout(function () {
document.write(4);
}, 0);

Если страница будет долго грузится и таймер сработает раньше, он грохнет текущий документ ещё до его загрузки.
Много раз сталкивался с примерами document.write и до сих пор не понимаю почему всегда когда вставляется скрипт он разбит на части
document.write('<script src="printC.js"></' + 'script>');

Но ведь и
document.write('<script src="printC.js"></script>');

будет работать точно также.
Это эстетство или есть определенные подводные камни которые обходят таким образом?

Закрывающий тег script может быть распознан браузером как конец скрипта. А вот вариант


document.write('<script src="printC.js"><\/script>');

Валиден повсюду.

на сколько я помню, document.write не закрывает документ, и потому дописывает после первого стирания. Сам браузер закрывает документ когда построит DOM, и вызов document.write просто открывает новый документ

попробуйте следующий пример:
document.write(1); document.write(2);
document.close(); document.write(3);

На экране будет только — 3
Какие еще глупости можно натворить с document.write?

Mobify.jsтыц
Не поэтому ли все закладки Geektimes у меня крутятся бесконечно? И даже Escape не останавливает, потому что нажатия перехватываются яндексовой метрикой. Только крестиком остановить можно.

я прочитал эту статью в 2022 и должен отметить, что понимание того, в какой последовательности запускаются скрипты, если их несколько, спрашивают и сейчас

Это прикольная статья для ребусов на собеседованиях )

Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории