escapování v inline javascriptu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Wosonj
Člen | 36
+
0
-

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
+
0
-

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 | 8152
+
0
-

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
+
0
-

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
+
0
-

ř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 | 8152
+
0
-

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ý.