2010-09-22 5 views
0

J'ai un code html rendu sur le serveur. Ceci est transmis à un jsp qui rend un appel javascript avec ce code html:Passage de html rendu à une fonction javascript

<script type="text/javascript"> 
    window.parent.${param.popup_return}("${helpId}", "${content}"); 
</script> 
contenu

est comme

" 
This is a <p class="xyz">test</p> 
" 

Mon problème est que - selon les citations de « contenu » - le javascript- appel est erroné car il est rendu à

<script type="text/javascript"> 
    window.parent.${param.popup_return}("ybc", "This is a <p class="xyz">test</p>"); 
</script> 

Est-ce que quelqu'un sait comment je peux résoudre cela (en plus de remplacer manuellement toutes les citations)?

+0

Je crains que l'échappement des guillemets ne soit présent dans aucune solution. –

Répondre

0

Utilisez un codeur JSON pour créer les chaînes codées.

Mais vous devez également vous assurer que la sortie ne contient pas la séquence </ dans des chaînes, ce qui est invalide dans un bloc <script> (</script est la version qui brisera les navigateurs).

De nombreux codeurs JSON, par défaut ou en option, codent en <\/ ou \u003C/ pour éviter ce problème.

0

J'utilise ceci:

<div id="result" style="display:none"> 
    ${content} 
</div> 
<script type="text/javascript"> 
    window.parent.${param.popup_return}("${helpId}", dojo.byId("result").innerHTML); 
</script> 

Cela semble fonctionner parfaitement

0

Vous n'utilisez JSTL ici (vous avez marqué à l'origine la question avec seulement JSTL). Vous utilisez EL dans le texte du modèle. Il est imprimé tel quel. Vous souhaitez utiliser le noyau JSTL <c:out> pour échapper predefined XML entities (qui fonctionne également pour le code HTML dans ce cas particulier, citations est parmi les entités XML échappées).

window.parent.${param.popup_return}("<c:out value="${helpId}" />", "<c:out value="${content}" />"); 

Une alternative (si vous détestez que les bogues surligneur de syntaxe JSP ou validateur/saccades sur les balises/citations imbriquées) est la fonction JSTL fn:escapeXml():

window.parent.${param.popup_return}("${fn:escapeXml(helpId)}", "${fn:escapeXml(content)}"); 
0

Avez-vous essayé d'utiliser des guillemets simples au lieu de double citation? c'est-à-dire de changer "${content}" en '${content}'

Questions connexes