Ненормальное программирование
Разработка веб-сайтов
JavaScript
Программирование
Браузеры
Комментарии 35
0
позвольте ламерский вопрос:
а что значит «когда страница загружена»? Как определяется, что страница загружена?
0
Если не ошибаюсь, страница считается загруженной, когда браузер получил ее код от сервера целиком и построил по нему DOM. Пользователь может отследить этот момент, как правильно сказал Vindicar, по событию onLoad, или с помощью более удобного синтаксиса у jQuery.
+2
То, что вы описали — это DOMContentLoaded, событие Load срабатывает при полной обработке всех ресурсов страницы. Однако, в таких ненормальных условиях, как наличие document.write непосредственно в script-теге, возможно существует и какое-то иное поведение.
+3
полезно еще знать, что есть document.close(), который по-хорошему стоит вызывать после document.write, иначе некоторые браузеры будут показывать крутилку «загрузки».
+1
Если я правильно понял, то document.close(); актуально только при создании дочерних окон и выполнении document.write в контексте нового окна. Так?
0
В моём случае это наблюдалось с src-less iframe (тобишь да, дочерним окном), но я без понятия, ограничивается ли явление только такими сценариями.
+1

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

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

You can't do it synchronously.


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

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

0
Чуть ниже могут быть скрипты, зависящие от jQuery, и они сломаются.
0

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

0
А вы не используете сторонние скрипты и легаси код? Я счастлив за вас.
А в реальном мире и первого и второго навалом, поэтому лучше гарантировать загрузку нужных зависимостей вовремя, нежели чем переписывать тонны скриптов в расчёте на внезапную их пропажу.
+1

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

0
> Использую, зачем вы из меня плюшевого мишку делаете?
Извиняюсь за немного резкую фразу.
> ПОВОД! Не нужда.
Как- то не отделяю данные понятия. Нужда даёт повод.
0
Извиняюсь за немного резкую фразу.

Принято )


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

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

0
> Так вот поводов использовать document.write — нет
Так же выше повод- синхронная вставка зависимостей, такой стиль имеет право на жизнь.
+7
>> * Под «до бесконечности» подразумевается 20 раз.

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

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

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

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

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

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

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

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


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

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

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

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

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