JavaScript jest wykonywany „inline”, tj. W kolejności, w jakiej pojawia się w DOM (gdyby tak nie było, nigdy nie można było być pewnym, że jakaś zmienna zdefiniowana w innym skrypcie była widoczna, gdy używałeś go po raz pierwszy ).
Oznacza to, że teoretycznie możesz mieć skrypt na początku strony (tj. Pierwszy <script>
element), który przegląda DOM i usuwa wszystkie <script>
elementy i programy obsługi zdarzeń z twojego <div>
.
Ale rzeczywistość jest bardziej złożona: ładowanie DOM i skryptu odbywa się asynchronicznie. Oznacza to, że przeglądarka gwarantuje, że skrypt może zobaczyć tylko część DOM, która jest przed nim (tj. Dotychczasowy nagłówek w naszym przykładzie). Nie ma żadnych gwarancji poza (jest to związane document.write()
). Więc możesz zobaczyć następny tag skryptu, a może nie.
Możesz dołączyć do onload
zdarzenia dokumentu - co zapewniłoby, że masz cały DOM - ale w tym czasie złośliwy kod mógł już zostać wykonany. Sytuacja pogarsza się, gdy inne skrypty manipulują DOM, dodając tam skrypty. Więc musiałbyś też sprawdzać każdą zmianę DOM.
Tak więc rozwiązanie @cowls (filtrowanie na serwerze) jest jedynym rozwiązaniem, które może działać w każdej sytuacji.