2012-06-29 17 views
36

Mamy kilka plików JavaScript, które ładujemy na dole strony wzorcowej. Jednak mam sytuację, że muszę wykonać trochę JavaScript zanim inne skrypty zostaną załadowane. Czy można poczekać, aż wszystkie pliki JavaScript zostaną załadowane, a następnie wykonać trochę kodu JavaScript?Czy można poczekać, aż wszystkie pliki javascript zostaną załadowane przed wykonaniem kodu javascript?

Myślałem, że zrobił to $(document).ready(), ale okazało się, że tak nie jest. Oczywiście możemy przesuwać pliki skryptów od dołu do góry, ale zastanawiam się, czy to możliwe, czego chcę.

+0

Można użyć 'ładowarka script' zrobić to po zrobieniu własnego skryptu. –

+1

Nie sądzę, żeby było jasne, czego chcesz - mówisz jednocześnie o tym, że chcesz wykonać X *, zanim * inne skrypty zostaną załadowane, ale także chcesz poczekać, aż wszystkie skrypty * zostaną załadowane *. Który to jest? Jaka jest natura X, którą chcesz wykonać? –

+0

@Damien_The_Unbeliever TGo być bardziej czytelny: Chcę wykonać javascript po załadowaniu wszystkich plików javascript. – Martijn

Odpowiedz

53

Można użyć

$(window).on('load', function() { 
    // your code here 
}); 

Który będzie czekać, aż strona zostanie załadowana. $(document).ready() czeka aż DOM jest ładowany

+1

Oto lepsze wyjaśnienie http://4loc.wordpress.com/2009/04/28/documentready-vs-windowload/ – Eruant

+0

Dobrze działało dla mojej aplikacji, która czekała, aż załadowane dynamicznie skrypty zostaną załadowane przed wygenerowaniem zawartości strony. +1 – Roberto

18

Można użyć atrybutu <script> o wartości . Określa, że ​​skrypt zostanie wykonany po ukończeniu parsowania strony.

<script defer src="path/to/yourscript.js"> 

Miły artykuł na ten temat: http://davidwalsh.name/script-defer

wsparcie Przeglądarka wydaje się dość dobre: ​​http://caniuse.com/#search=defer

+1

Wygląda na to, że nie czeka na wykonanie wszystkich innych plików JS, przynajmniej nie w Firefoksie. – Rolf

27

Można użyć .getScript() i uruchomić swój kod po załadowaniu:

$.getScript("my_lovely_script.js", function(){ 

    alert("Script loaded and executed."); 
    // here you can use anything you defined in the loaded script 

}); 

Można zobaczyć lepsze wyjaśnienie tutaj: How do I include a JavaScript file in another JavaScript file?

+8

jeśli chcę standardową funkcję javascript, a nie jquery. jak tam kod? –

+0

Należy zauważyć, że nie spowoduje to buforowania pliku, zostanie pobrane za każdym razem. Dokumentacja odwołuje się do $ .ajaxSetup lub $ .ajax, aby włączyć pamięć podręczną. – JanErikGunnar

Powiązane problemy