2009-09-03 4 views
0

Salut, j'ai un problème avec une chaîne javascriptassign chaîne javascript sans échapper

var foo = \"<a href="javascript(foo('a','b'))">test</a>\" 

Cette phrase me donne une erreur

je aurais pu échapper intérieur "mais je ne suis pas autorisé à changer <a href="javascript(foo('a','b'))">test</a> cette partie

Est-il possible de traiter cette condition?

Merci, Sourabh

+2

L'indice est dans le bit "non autorisé à changer", quelle raison pourrait-il y avoir pour cette restriction? – AnthonyWJones

Répondre

1

Soit échapper aux citations dans les JavaScript:

var foo = "<a href=\"javascript(foo('a','b'))\">test</a>"; 
var foo = "<a href=\x22javascript(foo('a','b'))\x22>test</a>"; 
var foo = '<a href="javascript(foo(\'a\',\'b\'))">test</a>'; 
var foo = '<a href="javascript(foo(\x27a\x27,\x27b\x27))">test</a>'; 

ou échapper aux citations dans les HTML:

var foo = '<a href="javascript(foo(&#39;a&#39;,&#39;b&#39;))">test</a>'; 
4

Non, vous devez échapper à la corde d'une manière ou d'une autre.

var foo = "<a href=\"javascript(foo('a','b'))\">test</a>"; 

ou

var foo = '<a href="javascript(foo(\'a\',\'b\'))">test</a>'; 
0

Non, il n'y a aucun moyen. Comme la partie que vous n'êtes pas autorisé à modifier contient à la fois des guillemets et des apostrophes, il n'y a aucun moyen de la représenter comme une chaîne littérale en Javascript sans la modifier.

Peut-être vous pouvez le mettre comme CData littérale dans une île XML dans la page, et laisser le Javascript lire à partir de là ...

2

Il n'y a pas moyen d'avoir se sont échappés sans les échapper caractères de la chaîne dans la chaîne, comme l'utilisation @ -quoted que C# a. par exemple

string myString = @""Good Morning", said Dave's mother"; 

Vous devez échapper aux caractères de la chaîne en utilisant JavaScript caractère \.

1

This forum topic semble avoir une alternative «intéressante», au moins. Il utilise des commentaires multilignes dans une fonction anonyme pour permettre aux chaînes contenant à la fois " et ', ainsi que des chaînes multilignes

Edit:. Selon bucabay (dans les commentaires ci-dessous), cette méthode ne fonctionne plus , au moins dans Firefox 3.5

+0

qui est une solution assez soignée.il n'a pas de dépendances en dehors du langage JS. en HTML ou XML dépend de l'extérieur – bucabay

+1

Je viens de tester cette solution dans Firefox3.5 et ça ne marche plus. Les corps de fonction sont ignorés par la méthode Function.prototype.toString(). – bucabay

+0

C'est dommage. J'étais au travail quand j'ai posté ma réponse, et donc je ne pouvais pas le tester moi-même. Maintenant je suis de retour à la maison, je n'en ai plus besoin. – Duroth