Master Coda - Logo
Master Coda
Nepravidelný blog o programování

Není JavaScript jako JavaScript

07.01.2023 (aktualizováno 13.01.2023)
Když obvyklá JS metoda nechce fungovat...
----------------------------------------

Jedna z našich aplikací je už dost stará - postavená na Java EE 6 a frontend dělaný v JSP se spoustou přidrátovaného JavaScriptu. Něco se vykonává v Javových “actions”, něco řeší až JS na zobrazené stránce. Kvůli historickým problémům se zobrazováním se navíc udělalo, že klient obaluje nějakou starou verzi Internet Exploreru a v něm se vykresluje obsah. Tato legacy záležitost se nechystá zemřít, a tak do ní občas přidáváme nové funkce.

Tuhle jsem potřeboval, aby se po kliknutí na tlačítko v detailu záznamu zobrazil v novém okně PDF dokument z interního archivu. Záznamy jsou několika typů a podle toho je potřeba pokaždé sáhnout na různá místa. Chtěl jsem to řešit hledáním společných částí (INFO, JRF a PD) v řetězci pro název typu, podle kterých se to dá poznat.

Google rychle odhalil, že JavaScript na to nabízí metodu .includes(). Tak jsem si myslel, že mám hotovo.

Jenomže to nefungovalo.

Metoda .includes() totiž přišla až s ES6 v roce 2015. Takže ačkoliv s ní už dávno nemá problém žádný z dnešních prohlížečů (obvyklý problém při tvorbě webů), náš speciální v aplikačním klientovi uvězněný starý IE nic takového nezná. Musel jsem se vrátit ke starému dobrému if (…) then { s kombinací || řetězení podmínek.

Web Can I use…

Užitečným pomocníkem pro plánování kompatibility vašeho kódu může být například webová stránka https://caniuse.com/, která je zaměřena přesně na tuto problematiku. V přehledné grafice ihned uvidíte, zda a od které verze prohlížeče tu kterou funkcionalitu podporují. Různých prohlížečů je v nabídce hned sedmnáct! S tím už vás jen tak něco nepřekvapí.

Například pro mnou zmiňovanou metodu .includes() to s podporou v prohlížečích vypadá TAKTO.

Poučení

Vždy si dobře rozmyslet, zda mi bude věc fungovat i na cílové platformě. Existují on-line nástroje, jak to zjistit.

----------------------------------------
Není JavaScript jako JavaScript @ Master Coda
Zobrazit zdrojový kód článkuNavrhnout úpravu