Wpis z mikrobloga

window.open w JavaScripcie w przeglądarkach - chyba najlepszy przykład popularnego, ale całkowicie źle zaprojektowanego API.

Pierwszy argument funkcji - URL strony, która powinna się pojawić w nowym oknie. Mogłoby się wydawać, że nie ma z tym problemu, ale jest bardzo nieoczywiste co się stanie, gdy ten URL prowadzi do pliku do pobrania (nie wiadomo czy powinno po prostu rozpocząć się pobieranie pliku, czy może oprócz tego powinno otworzyć się dodatkowe puste okno - a może w ogóle powinno się zawsze otwierać i później zamykać gdy przeglądarka dowie się że URL nie prowadzi do strony). Dodatkowo jeżeli URL ma protokół javascript:, nie wiadomo w jakim kontekście powinien wykonać się ten skrypt z URL-a - bieżącej strony, about:blank, czy może jeszcze czegoś innego.

Drugi argument funkcji - string z nazwą okna lub jedną z kilku określonych w standardzie "magicznych" wartości tekstowych. Nie ma żadnego escape'owania, gdyby było potrzebne okno o nazwie będącej którąś z tych wartości. Łatwo się pomylić i np. zamiast _blank podać blank, czego żadne narzędzie nie wykryje, a i podczas ręcznego testowania można nie zauważyć, bo dopiero przy wielokrotnym wykonaniu widać złe działanie.

Trzeci argument funkcji - lista opcji (par klucz/wartość) przekazywanych jako string klucz=wartość,innyklucz=innawartość..., pomimo tego że język obsługuje obiekty, które są właśnie zbiorami par klucz-wartość. Dodatkowo domyślne wartości opcji używane w przypadku ich niepodania w tym stringu nie są stałe, tylko zależne od obecności lub braku innych, np. zmiana z '' na 'left=0,top=0' nie tylko ustawi opcje left i top, ale także spowoduje że scrollbars zmieni swoją wartość z yes na no, przez co w przeglądarkach to obsługujących otwarta strona nie będzie miała paska przewijania.

Można odnieść wrażenie, że autor tego API nigdy wcześniej nic większego nie programował.

#programowanie #webdev #javascript
  • 6