2016-11-08 4 views
0

hinzufügen Ich habe Express mit Mops als Ansicht. Mein index.pug hat folgendes:Wie man beschrifteten Skript Tag in Express + Jade/Mops

script(type='text/javascript'). 
     window.__DATA__ = !{payload} 

wo Nutzlast ein JSON-Objekt ist.

res.render('index', { 
    payload : JSON.stringify({ 
     "anExample": "<script></script>" 
    }) 
}) 

Wenn meine Json Objekt hat </script> es endet meine window.__DATA = Funktion vorzeitig wegen der Endung Skript-Tag: Es wurde in der Render-Funktion Express-Zeichenfolge. Wie kann ich verhindern, dass meine Seite in die Luft geht? Ist das eine Einschränkung von Pug oder Express oder dem Browser?

+0

Terence, haben Sie sich meine Antwort angesehen? – Cerbrus

Antwort

0

Nach der Frage nach der Lösung ist die Verwendung einer stringify-Bibliothek anstelle der bereitgestellten JSON.stringify-Funktion.

Speziell verwendete ich das Npm-Modul js-stringify, die die < Zeichen in Unicode zusätzlich zum Stringing der JSON ändert. Das kann dann in eine Template-Engine wie Pug eingefügt werden. Pug kann es dann mit !{my_stringified_json} enteascape. Da es unicodes zu seinem ursprünglichen zurückbringt, wird der json am Ende 'anExample: '<script></script'> anstelle von seinem Unicodeäquivalent.

0

Sie müssen die Zeichenfolge, die die Skript-Tags enthält, "auflösen".

So etwas sollte funktionieren:

"anExample": "<script></scr" + "ipt>" 

Auf diese Weise </scr" + "ipt> wird nicht als Verschluss Script-Tag interpretiert werden.

+0

Dies war keine praktikable Lösung, weil es ziemlich schwierig ist, einen JSON für Skript-Tags neu zu definieren und die Strings aufzuteilen. Hinweis: Ich verwende einen verschachtelten JSON, sodass es noch nerviger wird, Skript-Tags in einem tief verschachtelten JSON loszuwerden. Ich werde eine Antwort geben für das, was ich getan habe –