Wykonuję zewnętrzny skrypt, używając <script>
wewnętrznego <head>
.
Ponieważ skrypt wykonuje się przed załadowaniem strony <body>
, między innymi nie mam dostępu do . Chciałbym wykonać JavaScript po „załadowaniu” dokumentu (HTML w pełni pobrany i wbudowany w RAM). Czy są jakieś zdarzenia, do których mogę się przyczepić podczas wykonywania skryptu, które zostaną wywołane podczas ładowania strony?
javascript
html
dom-events
pageload
Błysk
źródło
źródło
document.onload=
nie jest narzucający się en.wikipedia.org/wiki/Unobtrusive_JavaScriptRacjonalnie przenośny, niestrukturyzowany sposób ustawiania skryptu do uruchamiania w czasie ładowania:
źródło
Pamiętaj, że ładowanie strony ma więcej niż jeden etap. Btw, to jest czysty JavaScript
„DOMContentLoaded”
To zdarzenie jest uruchamiane, gdy początkowy dokument HTML został całkowicie załadowany i przeanalizowany , bez oczekiwania na zakończenie ładowania arkuszy stylów, obrazów i podramek. Na tym etapie można programowo zoptymalizować ładowanie obrazów i css w zależności od urządzenia użytkownika lub szybkości łącza.
Wykonuje się po załadowaniu DOM (przed img i css):
"Załaduj"
Zupełnie inne zdarzenie, ładowanie , powinno być używane tylko do wykrywania w pełni załadowanej strony . Bardzo popularnym błędem jest użycie obciążenia, w którym DOMContentLoaded byłby znacznie bardziej odpowiedni, więc bądź ostrożny.
Występuje po załadowaniu i przeanalizowaniu wszystkiego:
Zasoby MDN:
https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded https://developer.mozilla.org/en-US/docs/Web/Events/load
Lista MDN wszystkich zdarzeń:
https://developer.mozilla.org/en-US/docs/Web/Events
źródło
window.onload = ...
myśleć, że mój skrypt zaczeka, aż wszystko zostanie w pełni pobrane przed uruchomieniem, ale wygląda na to, żewindow.onload
tak się zachowujedocument.addEventListener("DOMContentLoaded", ...
, podczas gdywindow.addEventListener("load", ...
naprawdę naprawdę czeka, aż wszystko zostanie w całości pobrane. Myślałem, że towindow.onload
powinno być równoważnewindow.addEventListener("load", ...
zamiastdocument.addEventListener("DOMContentLoaded", ...
?? Ten sam wynik uzyskałem w Chrome i FF.Możesz umieścić atrybut „onload” wewnątrz ciała
Lub jeśli używasz jQuery, możesz to zrobić
Mam nadzieję, że odpowie na twoje pytanie.
Zauważ, że $ (okno) .load zostanie wykonane po wyrenderowaniu dokumentu na twojej stronie.
źródło
Jeśli skrypty są ładowane w obrębie
<head>
dokumentu, możliwe jest użyciedefer
atrybutu w znaczniku script.Przykład:
Od https://developer.mozilla.org :
źródło
Oto skrypt oparty na odroczonym ładowaniu pliku js po załadowaniu strony,
Gdzie to umiejscowić?
Co to robi?
Oto przykład powyższego kodu - Odroczenie renderowania JS
Napisałem to w oparciu o odroczone ładowanie strony javascript pagepeed google, a także zaczerpnąłem z tego artykułu Odrocz ładowanie javascript
źródło
Spójrz na zaczepianie
document.onload
lub w jQuery$(document).load(...)
.źródło
Działające skrzypce włączone
<body onload="myFunction()">
źródło
http://www.feedthebot.com/pagespeed/defer-loading-javascript.html
źródło
Jeśli używasz jQuery,
$(function() {...});
jest równa
$(document).ready(function () { })
lub inna krótka ręka:
$().ready(function () { })
Zobacz Jakie zdarzenie uruchamia funkcja JQuery $ ()? i https://api.jquery.com/ready/
źródło
spójrz tutaj: http://msdn.microsoft.com/en-us/library/ie/ms536957(v=vs.85).aspx
źródło
Czasami znajduję na bardziej złożonych stronach, że nie wszystkie elementy załadowały się w oknie czasowym. Ładunek jest uruchamiany. W takim przypadku dodaj setTimeout, zanim funkcja opóźni się za chwilę. Nie jest elegancki, ale jest to prosty hack, który dobrze się renderuje.
staje się...
źródło
Po prostu określ,
<body onload="aFunction()">
że będzie wywoływany po załadowaniu strony. Twój kod w skrypcie jest następnie załączonyaFunction() { }
.źródło
Ten kod działa dobrze.
Ale
window.onload
metoda ma różne zależności. Więc może nie działać cały czas.źródło
Korzystanie z biblioteki YUI (uwielbiam to):
Przenośny i piękny! Jeśli jednak nie używasz YUI do innych rzeczy (zobacz jego dokumentację), powiedziałbym, że nie warto go używać.
Uwaga: aby użyć tego kodu, musisz zaimportować 2 skrypty
źródło
Istnieje bardzo dobra dokumentacja na temat tego, jak wykryć, czy dokument został załadowany przy użyciu Javascript lub Jquery.
Można to osiągnąć za pomocą natywnego Javascript
Można to również zrobić w przedziale czasowym
Np. Mozilla
Korzystanie z Jquery Aby sprawdzić, czy DOM jest gotowy
Aby sprawdzić, czy wszystkie zasoby są załadowane, użyj window.load
źródło
Użyj tego kodu z biblioteką jQuery, to zadziała idealnie.
źródło
.ready () działa najlepiej dla mnie.
.load () będzie działać, ale nie będzie czekać, aż strona zostanie załadowana.
Nie działa dla mnie, psuje skrypt inline. Używam również jQuery 3.2.1 wraz z kilkoma innymi widelcami jQuery.
Aby ukryć nakładkę ładującą strony internetowe, używam:
źródło
JavaScript
to samo dla jQuery:
UWAGA: - Nie używaj poniższego znacznika (ponieważ zastępuje on inne deklaracje tego samego rodzaju):
źródło
Jak mówi Daniel, możesz użyć document.onload.
Różne frameworki javascript (jQuery, Mootools itp.) Używają niestandardowego zdarzenia „domready”, które, jak sądzę, musi być bardziej skuteczne. Jeśli rozwijasz się przy użyciu javascript, zdecydowanie polecam wykorzystanie frameworka, ponieważ znacznie zwiększają twoją wydajność.
źródło
źródło
Radzę użyć
asnyc
atrybutu dla tagu skryptu, który pomoże załadować zewnętrzne skrypty po załadowaniu stronyźródło
defer
zamiast, jak wspomniany @Daniel Price?użyj funkcji onload samowykonywania
źródło
onload
obsługi, stosując to podejście. Zamiast tego należy dodać detektor.