2015-02-01 8 views
10

Ich habe einige Tricks in Javascript versucht und kam zu einem lächerlichen Problem: Ich kann <script> nicht als Teilzeichenfolge in einer JavaScript-Zeichenfolge verwenden! Hier ist ein Beispiel:Wie setze ich "</script>" in eine JavaScript-Zeichenfolge?

<html> 
    <head> 
     <script> 
      alert("<script></script>"); 
     </script> 
    </head> 
</html> 

Es sollte auszudrucken <script></script>, sondern bekomme ich diese:

"); 

auf der Seite gedruckt aus, als HTML.

Frage: Wie kann ich <script> gefolgt von </script> Substrings in einem String, in Javascript, jeder, warum ist es so handeln?

Hier ist JSFiddle davon :)

Antwort

15

Was Sie auslöst, ist die </script>. Der HTML-Parser erkennt JavaScript-Zeichenfolgen oder verschachtelte <script>-Tags nicht, daher interpretiert er das als schließendes Tag für den ursprünglichen <script>. Das heißt, dieser Teil des Dokuments wird analysiert, wie:

<script>    (open tag) 
    alert("<script>  (text node - contents of the script) 
</script>    (close tag) 
");      (text node - plain text) 

Die zweite </script> ignoriert wird, wie es gibt keinen anderen <script>-Tag für diese zu schließen.

Um dies zu umgehen, brechen </script, damit der HTML-Parser es nicht sehen. Zum Beispiel:

alert("<script><\/script>"); 

oder:

alert("<script><" + "/script>"); 

oder einfach den Code in einer externen Javascript-Datei. Dieses Problem tritt nur für Inline-Skripts auf.

1

es wegen der \ ist, glaube ich. Ich habe keine konkrete Erklärung, da ich ein Neuling auf Javascript bin aber dieser Code sollte funktionieren:

alert("<script><\/script>"); 

kam damit Java-Kenntnisse mit .. Haha, da die \ eine Escape-Taste in vielen Sprachen ist.

Verwandte Themen