escapování v inline javascriptu
- Wosonj
- Člen | 36
Po update na novou verzi se špatně escapují proměnné v inline javascriptu:
<script>
img=new Image;
img.src='{$baseUri}images/test.png';
... odešle:
img.src='"\/myapp\/document_root\/"images/test.png';
</script>
Je tam vůbec přemíra escapování – všechny stringy se vloží s uvozovkami – myslím by bylo rozumnější nechat uvozovkování v javascriptu na uživateli.
- Ola
- Člen | 385
Wosonj napsal(a):
Je tam vůbec přemíra escapování – všechny stringy se vloží s uvozovkami – myslím by bylo rozumnější nechat uvozovkování v javascriptu na uživateli.
Myslím, že by to mělo být spíš takto (netestoval jsem to):
<script>
img=new Image;
img.src="{!$baseUri}images/test.png";
</script>
Editoval Ola (22. 12. 2008 20:22)
- David Grudl
- Nette Core | 8228
Mělo by to být
<script>
img=new Image;
img.src = {$baseUri} + "images/test.png";
</script>
Proměnné se nyní chovají jako proměnné JavaScriptu. Další info třeba zde.
- Wosonj
- Člen | 36
David Grudl napsal(a):
Mělo by to být
<script> img=new Image; img.src = {$baseUri} + "images/test.png"; </script>
To už sice funguje, ale výsledek v kódu je:
<script>
img=new Image;
img.src="\/myapp\/document_root\/" + "images/test.png";
</script>
řešení s vykřičníkem funguje.
- Honza Marek
- Člen | 1664
řešení s vykřičníkem funguje.
Ano, ale problém by nastal, kdyby v proměnné byly znaky jako " nebo '.
Popravdě řečeno, taky mě tohle zmátlo… Myslím, že by bylo intuitivnější vracet escapovaný javascript bez uvozovek. Přestože takhle je to o několik znaků pohodlnější. Jednak je to trochu BC break – dříve v šabloně uvozovky být musely, teď nesmí. A druhak, kdyby se to vracelo bez uvozovek, tak bude mít člověk větší volnost toho, co vzejde z výsledku, ale to je spíše estetické než funkční omezení.
Editoval Honza M. (23. 12. 2008 9:54)
- David Grudl
- Nette Core | 8228
BC breakem se to moc nedá nazvat, protože předtím JavaScript podporovaný nebyl vůbec, navíc použití uvozovek způsobilo taky problém, ač jiný (to byl ten problém s nevykonáváním signálu při školení).
Wosonj napsal(a):
řešení s vykřičníkem funguje.
Jak píše Honza, vykřičník není obecně použitelný.