2016-10-27 3 views
-1

Ich habe auf ein Zitat Flucht Problem für die letzte Stunde (in JavaScript) stecken. Hier ist sie:Zitat Escape mindblow - JavaScript

var injectScript = function() { 

    var scriptToInject = "" + 
    "secretFunction(secretElement.setSecretAttribute('<button class=&#x27;button-default&#x27;>MyButton</button>'));"; 

    secretService.sendRequest(scriptToInject); 
} 

So das Ziel meiner injectScript() Funktion ist JavaScript-Code zu injizieren. Es funktioniert normalerweise, aber mit diesem speziellen Beispiel ist es nicht.

Auf dem Code, den ich einfügte, können Sie sehen, dass ich versuche, die Funktion secretFunction() zu injizieren. Diese Funktion ändert nur einige Attribute von Elementen in einer HTML-Seite.

Aber in der Chrome-Konsole Code meines Elements ist die folgende:

<button class="'button-default'">MyButton</button> 

Ich weiß nicht, warum es sowohl "und‘ Das Ergebnis erwarte ich ist.

<button class="button-default">MyButton</button> 

Ich habe viele Flucht Tipps (\ ", \ ', etc.) versucht, aber nicht funktionieren .. Irgendwelche Ideen?

+1

Da wir nicht wissen, wie secretService.sendRequest, secretElement.setSecretAttribute oder secretFunction Arbeit, diese eher schwer zu debuggen ist. – Quentin

Antwort

0

setSecretAttribute nicht Unter der Annahme, nicht die Zeichenfolge in irgendeiner Weise munge, benutzen Sie einfach \" in Ihrer " -quoted Zeichenfolge, und entfernen Sie die verirrten ;:

var injectScript = function() { 

    var scriptToInject = "" + 
    "secretFunction(secretElement.setSecretAttribute('<button class=\"button-default\">MyButton</button>'));"; 
    // -------------------------------------------------------------^^--------------^^^ 

    secretService.sendRequest(scriptToInject); 
} 

Die Zeichenfolge, die

secretFunction(secretElement.setSecretAttribute('<button class="button-default">MyButton</button>') 
ist definiert

... und die Zeichenfolge , die definiert, ist


Randbemerkung: Es gibt keine Notwendigkeit für die "" + nach scriptToInject =.

0

Sie versuchen, die HTML-Entitätsreferenz für ein einzelnes Anführungszeichen als Trennzeichen für Ihr Klassenattribut zu verwenden. Wenn der Browser die HTML-Entität trifft, wird sie nicht als Trennzeichen angezeigt und behandelt sie daher als fehlerhaft formatiertes HTML. Es versucht, hilfreich zu sein und das für Sie zu beheben, indem es das tut, wovon es glaubt, dass der Attributwert beabsichtigt ist, und es in Anführungszeichen verpacken. Bei der Ausgabe an die Konsole wird die HTML-Entität decodiert, wodurch das Problem verschleiert wird.

Sie sind besser dran, nur Anführungszeichen verwenden und sie in geeigneter Weise zu entkommen:

"secretFunction(secretElement.setSecretAttribute('<button class=\"button-default\">MyButton</button>'));"; 
Verwandte Themen