Ich habe etwas sehr seltsames gefunden. Wenn Sie so etwas in Ihre HTML-Seite einfügen, beendet der Browser (der auf FF und Chrome getestet wurde) einfach das Rendern der Seite an dieser Stelle:
%Vor%Natürlich können Sie auch:
%Vor%Oder:
%Vor%Irgendwelche Ideen, warum das passiert?
TL; DR:
Tun Sie das nicht - es lässt den Parser einige seltsame Regeln bezüglich doppelt entgehender Skriptdaten befolgen und belässt es (aus Ihrer Sicht) in dem "falschen" Zustand, bis es </script>
erreicht. Es gibt Möglichkeiten, um Dinge in Ihren Skriptdaten zu umgehen um sicherzustellen, dass es sich wie gewünscht verhält, ohne den Parser zu unterbrechen.
Der Parser verfügt über strenge Regeln, die beim Parsen der Seite beachtet werden. In diesem Fall:
Wir beginnen, nachdem wir das öffnende <script>
Tag gesehen haben, in:
Skriptdatenstatus .
In dieser Phase löst <
aus:
Skriptdaten sind kleiner als der Zeichenstatus
dann wird !
ausgelöst:
Startbedingung für Skriptdaten-Escape
dann wird -
ausgelöst:
Scriptdaten Escape Start Dash-Status
dann wird -
ausgelöst:
Skriptdaten sind im Dash-Dash-Status ausgeblendet
dann wird <
(sofort oder während des Status "Skriptdaten ausgeblendet") ausgelöst:
Skriptdaten wurden weniger als als Zeichenstatus behandelt
dann wird jedes a-z oder A-Z (dh das "S" in "SCRIPT") im "temporären Puffer" gespeichert, und wir gehen zu:
Skriptdaten Double Escape Startzustand . Wir bleiben in diesem Zustand bis zum Ende von script
, dann >
, wobei die Kombination des temporären Puffers gleich "script" triggert:
Skriptdaten doppelter Escape-Status
Es werden nur die Zeichen ausgegeben (in Ihrem Fall), bis wir zum <
von </script>
gelangen, was folgendes auslöst:
Script data double entkam weniger als than Staat
Der /
in </script>
löscht dann den temporären Puffer und wir wechseln zu:
Skriptdaten Doppel-Escape-Endstatus . Dadurch werden die Zeichen erneut an den temporären Puffer angehängt, bis wir den >
sehen. An diesem Punkt ist der temporäre Puffer gleich "script", was Folgendes auslöst:
Status der Skriptdaten maskiert
Wir befinden uns also in einem Zustand, in dem der Browser denkt, dass er immer noch in einigen Skripten verborgen ist, anstatt dass das ursprüngliche <script>
-Tag geschlossen wurde, so dass kein weiterer HTML-Code als solcher betrachtet wird Daten, die an die Scripting-Engine übergeben und nicht als HTML verarbeitet werden.
Die Gründe dafür, dass der Parser auf diese Weise funktioniert, sind nicht klar, aber mit der Art, wie sich die Dinge im Laufe der Zeit entwickelt haben, liegt das wahrscheinlich an einigen schrecklichen Rückwärtskompatibilitätsgründen.
In der Vergangenheit war es üblich, die Browser, die das Skript-Tag nicht kennen, mit HTML-Kommentaren innerhalb der Skriptblöcke zu behandeln:
%Vor% Wie Sie sehen, ist das erste <!--
in Javascript nicht gültig, aber die Browser müssen es trotzdem ignorieren, um mit diesem alten Trick kompatibel zu sein.
Dies scheint ein seltsames Verhalten in einem Browser auszulösen, wenn wir ein <script>
hinzufügen, wie Sie in dieser Geige sehen können: Ссылка
Sie müssen also entweder den HTML-Kommentar schließen, indem Sie in Ihrem Skript // -->
hinzufügen, oder </script>
zweimal einfügen.
Tags und Links javascript browser