Один файл JavaScript. Как я могу проверить, загрузилась ли определенная страница, не вставляя встроенные скрипты?

Как я могу проверить, загрузилась ли определенная страница, не вставляя встроенные скрипты? Обычно я помещаю встроенный скрипт, который вызывает функцию в заголовке html страницы, используя window.onload, но как этого можно достичь с помощью связанного файла JavaScript?

Например, предположим, что у меня есть кнопка, открывающая специальную страницу, и мне нужно, чтобы DOM была готова, прежде чем я начну использовать для нее какие-либо сценарии. Должен ли я использовать два файла JavaScript, связанных в нижней части каждого тела?, А затем обернуть все в функцию, вызываемую событием onload?


person Jason210    schedule 24.02.2016    source источник


Ответы (2)


Довольно распространено размещать теги скрипта внизу страницы, непосредственно перед последним тегом body. Это будет означать, что к этому моменту модель DOM будет загружена, и выполнение вашего кода будет безопасным. Кроме того, это означает, что ваши скрипты не будут загружены до самого конца, что упрощает работу посетителей.

Если вы хотите быть конкретным, вы можете добавить прослушиватель событий в тег тела и запустить свой код после загрузки тела. Я не уверен, что именно вы используете, поэтому не знаю, послужит ли это вашим целям лучше. Предполагая, что вы не делаете ничего необычного и ваши скрипты размещаются непосредственно перед последним тегом body, это не будет иметь большого значения, поскольку большая часть DOM уже была бы загружена. Если бы вы действительно хотели это сделать, вы бы использовали следующий код.

var bodyElement = document.getElementsByTagName("BODY")[0];
bodyElement.onload = function () {
    // Your loading function
}
person Chris Tomich    schedule 24.02.2016
comment
Спасибо. Очень интересно, что вы можете получить доступ к элементу body через массив. Это действительно то, что я хотел знать. Не знаю, почему я об этом не подумал :-) - person Jason210; 24.02.2016

Пусть A будет страницей с кнопкой, которую вы нажимаете.
Пусть B будет специальной страницей, которая открывается при нажатии кнопки A

Я с трудом понимаю, о чем вы спрашиваете, но это похоже на случай, когда «А предшествует Б».

Если кнопку на странице A можно щелкнуть после завершения загрузки страницы, то сценарий, который запускается после завершения загрузки страницы B, может безопасно предполагать, что загружены и A, и B. Вы можете написать логику в B, которая зависит от загрузки A, только если вы можете гарантировать, что A загружает B. Что произойдет, если доступ к B будет осуществляться напрямую в обход A?

Возможная разметка для B следующая:

<html>
    <head>
        <title>Special Page</title>
    </head>
    <body>

        <script src="test.js"></script>
    </body>
</html>

Файл test.js, ссылка на который приведена выше:

window.onload = function(){
    console.log('special page is loaded');
};

Событие onload на странице B может с уверенностью предположить, что A загрузился, но только если вы можете гарантировать, что A всегда вызывает B.

Я понятия не имею, пытаетесь ли вы загрузить страницу B в iframe или выполнить перенаправление страницы с A на B или получить B в A с помощью Ajax и HTTP GET.

person ThisClark    schedule 24.02.2016
comment
Спасибо. Страница A всегда будет открывать страницу B со ссылкой. - person Jason210; 24.02.2016