Variable Zeichenfolge, die den Browser abstürzt

8

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?

    
Simon Siegenthaler 01.07.2016, 11:26
quelle

2 Antworten

5

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 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.

    
James Thorpe 01.07.2016 12:16
quelle
3

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.

    
Anthony Garcia 01.07.2016 12:20
quelle

Tags und Links