Некоторое время назад я ознакомился с JavaScript и в то время чувствовал себя хорошо. Теперь, когда я думаю об этом, мне кажется, что это ничего. Сегодняшняя задача — изучить главу о жизненном цикле клиентской страницы в asp.net ajax. Однако меня немного смутило содержание этой главы. Ни одно из этих сомнений в книге не упоминается.
1. Каков подробный процесс загрузки HTML-страницы? Каков приоритет элементов страницы при загрузке?
2. Область применения JavaScript, область действия переменных и взаимосвязь между различными сегментами сценария?
3. Каков жизненный цикл HTML-страниц?
Эти вопросы действительно задели меня. Не понимая этого, я не могу увидеть основные принципы через структуру ajax asp.net. Я только знаю это, но не знаю почему.
В случае обширного поиска информации в Интернете. Получил несколько ответов.
О загрузке HTML:
Вообще говоря, HTML загружается и анализируется сверху вниз, генерируя объекты DOM. Что касается того, что смешано в HTML:
document.write("хххх");
<script type="text/javascript" src="aaa.js"></script>
Каков их порядок? Тем не менее, если вы столкнетесь с этими вещами при анализе HTML, вы прекратите анализ и выполните эти сгенерированные инструкции. Если внешняя ссылка вставлена в середину, вы будете анализировать и выполнять js, соответствующий внешней ссылке. Следующие операторы имеют разные результаты для разных браузеров:
<script type="text/javascript" src="aaa.js"></script>
в т.е. Он не будет ждать загрузки и анализа aaa.js. Он создаст другой поток для его обработки, а основной поток пройдет. Но в фф. Он будет ждать, пока aaa.js будет загружен, проанализирован и выполнен.
Что касается выполнения javascript, см. справочные материалы, прикрепленные в конце этой статьи, где есть подробное обсуждение.
О жизненном цикле страниц в html:
Два наиболее важных события — onLoad и onUnLoad. onLoad срабатывает при загрузке страницы. onUnLoad срабатывает после уничтожения DOM страницы. Однако onLoad немного особенный, см. также справочные материалы, прикрепленные в конце этой статьи. Обязательно привлеките внимание.
Я просмотрел исходный код html нескольких сайтов и нашел следующий код:
<div><script src="/ggjs/view1602_w.js"></script></div>
Это код веб-сайта для отображения рекламы на странице. На отечественных веб-сайтах рекламные объявления обычно используют iframe для представления сторонних страниц, но здесь они генерируются напрямую с использованием сегментов JavaScript. Позже я посмотрел HTML-код, созданный блогом 163. Это было настолько ненормально. Весь html-код имеет только одну полку, а все страницы генерируются через js. Я увидел, что за страницей появилось несколько js-файлов, и, наконец, в конце страницы был вызов функции initAll. Я не внимательно изучал его js-код. Подозреваю, что он помещает все функции уровня представления в js-файл клиента. Серверная часть — это всего лишь несколько стоек страниц и множество веб-сервисов. Это действительно захватывает дух.
Что касается события, запускающего функции множественного ответа:
Однажды я подумал о реализации чего-то похожего на делегат в C#. События JavaScript могут быть связаны с более чем одной функцией. Список событий может быть запущен одновременно. Сейчас я изучаю asp.net ajax, и для этого есть пакет.
В asp.net ajax элемент dom может быть инкапсулирован в объект Sys.UI.DomElement в asp.net ajax. Затем вы можете использовать его методы: addHandler(), addHandlers(), RemoveHander() для работы со списком событий. Как удобно. В то время я не совсем понимал этот принцип. Сегодня я увидел два фрагмента кода в справочном материале ниже, что позволило мне полностью понять детали:
1. Используйте интерфейс в доме 2:
Скопируйте код кода следующим образом:
если (document.addEventListener) {
window.addEventListener('load',f,false);
window.addEventListener('load',f1,false);
…
}еще{
window.attachEvent('onload',f);
window.attachEvent('onload',f1);
…
}
Оказывается, эта концепция уже существовала в DOM. Только тогда я узнал. Кажется, я до сих пор многого не понимаю в dom.
Во-вторых, этот метод реализуется исключительно вручную. См. код ниже:
Скопируйте код кода следующим образом:
функция addLoadEvent(func) {
вар oldonload = window.onload;
if (typeof window.onload != 'функция') {
window.onload = функция;
} еще {
window.onload = функция() {
если (oldonload) {
старыйonload();
}
функция();
}
}
}
Эта функция очень умно написана. Используйте анонимные функции, чтобы сделать это!