2013-05-18 10 views
8

Zakładając, że ma się wbudowany kod JavaScript w dokumencie HTML (na przykład treść), czy ten fragment kodu JavaScript jest zawsze wykonywany przed kodem gotowym do dokumentu JQuery?Czy wbudowany/blokowany Javascript jest wykonywany przed przygotowaniem dokumentu?

Na przykład, czy następujące bezpieczne?

... 
<body> 
    <script type="text/javascript"> 
     var myVar = 2; 
    </script> 
    ... 
</body> 

... 
$(document).ready(function() { 
    alert('My Var = ' + myVar); 
} 

Jeśli nie, w jaki sposób mogę to zrobić bezpiecznie wiedząc myVar jest zdefiniowany w kodzie inline/bloku?

Odpowiedz

10

Tak, powyższy kod jest bezpieczny. Inline JS jest wykonywany tak, jak jest napotkany, podczas gdy dokument jest analizowany od góry do dołu. Procedura obsługi gotowego dokumentu jest wykonywana, gdy dokument jest gotowy (oczywiście) i nie będzie gotowa, dopóki cały dokument nie zostanie przeanalizowany w postaci , w tym skryptów wbudowanych.

Pamiętaj, że naprawdę nie potrzebujesz programu obsługi gotowego dokumentu, jeśli umieścisz kod, który jest zawijany jako ostatnia rzecz w treści dokumentu, ponieważ w tym momencie nie tylko inne wbudowane JS zostały wykonane, ale cały dokument elementy zostaną dodane do DOM i dzięki temu będą dostępne z JS.

7

Tak, wbudowany JavaScript jest wykonywany podczas analizowania kodu HTML.

Można to bezpiecznie zrobić, o ile nie próbujesz uzyskać odwołania do elementu DOM, który nie został jeszcze przeanalizowany (tj. Dowolnego elementu po bloku skryptu w kodzie zasobu HTML). Możesz także odwoływać się do dowolnej zmiennej zdefiniowanej we wcześniejszych blokach skryptu (o ile są one w zasięgu).

I, jak podkreślił Matt Browne w swoim komentarzu, ogólnie można również bezpiecznie nie używać detektora DOMContentLoaded (lub obejścia oldIE lub window.onload), jeśli skrypt jest oparty na ładowaniu DOM tuż przed zamykający tag </body>. W tym momencie wszystkie elementy HTML będą już w DOM (chyba że masz kolejne elementy po </body>, które byłyby nieprawidłowym HTML).

+3

Powiązana uwaga: Zasadniczo bezpiecznie nie można użyć '$ (document) .ready()' jeśli umieścisz skrypt oparty na jQuery tuż przed zamykającym znacznikiem ''. –

+3

Uwaga na temat notatki: skrypt oparty na jQuery może znajdować się w dowolnym miejscu po dodaniu pliku jquery.js. Ale wiemy, co znaczyło @MattBrowne: skrypt, który opiera się na gotowym DOM, może być umieszczony na końcu ciała, a nie w gotowym programie obsługi. – nnnnnn

+0

@nnn edytowane dla precyzji – bfavaretto

1

Można bezpiecznie założyć, że myVAr jest dostępny pod numerem .

Po uruchomieniu kodu w kodzie HTML, myVar staje się własnością globalnego obiektu JS window (tj. window.myVar). Nie sądzę, że konieczne jest tworzenie go lokalnie w funkcji jQuery.

Powiązane problemy