Мне очень нра­вит­ся брау­зер в iPhone. По су­ти, он дал на­ча­ло но­вой эры мо­биль­но­го ин­тер­не­та, по­ста­вив на свое ме­сто раз­но­об­разные огрыз­ки для уродли­вых сим­би­а­нов ти­па Опе­ры Ми­ни и иже с ним. По­строен он (как и брау­зер Android, Palm Pre и про­чих совре­мен­ных мо­биль­ных ОС) на осно­ве webkit, что да­ет воз­мож­ность рен­де­рить стра­ни­цы имен­но та­ки­ми, ка­кие они есть, а не так, как это вла­зит на экран­чик финско­го смарт­фо­на (да, я знаю о су­ще­ство­ва­нии веб­ки­та для S60, но вы его ви­де­ли?). Это та­кая пре­лю­дия, дальше, как обыч­но, пре­ды­сто­рия =)

Од­на­жды по­че­му-то мне за­хо­те­лось по­иметь Ян­декс.Кар­ты на сво­ем устрой­стве. В апп­сто­ре бы­ли толь­ко Ян­декс.Проб­ки, ко­то­рый хоть вро­де как бы и кар­ты од­новре­мен­но с по­ис­ком и ЖПС, но до стан­дарт­но­го при­ло­же­ния гугло­мепс да­же и на цы­поч­ках с пал­кой в ру­ке не до­тя­ги­ва­ют. По­это­му я, как по­ла­га­ет­ся, по­че­сал ре­пу и при­сту­пил к на­пи­са­нию своих карт с блек­дже­ком, на­ви­га­ци­ей, из­бран­ны­ми мет­ка­ми и шлю­ха­ми.

Опи­са­ние при­ло­же­ния: да­вайте спер­ва не­по­сред­ствен­но про про­граммку. Лич­но я счи­таю, что по­лу­чи­лось впол­не очень да­же. Для уста­нов­ки вам нуж­но всего лишь открыть ссыл­ку /media/ymapw/ в Safari на сво­ем ябло­фо­не и сле­до­вать инструк­ци­ям. По­сле это­го на ва­шем home screen долж­на по­явить­ся икон­ка YaMap Web, ее и запус­каем. Ин­тер­фейс карт и все дей­ствия ана­ло­гич­ны ори­ги­наль­ным гугло­кар­там. Ще­пок для уве­ли­че­ния\умень­ше­ния (по­ка это де­ла­ет­ся очень не­спеш­но, я в по­ис­ках ре­ше­ния), двой­ной tap для при­бли­же­ния к опре­де­лен­ной точ­ке. Име­ет­ся по­иск, вы­бор ти­па кар­ты, бы­строе пере­ме­ще­ние к сво­е­му ме­сто­по­ло­же­нию по gps и отоб­ра­же­ние этих коор­ди­нат на кар­те флаж­ком. Единствен­ное что - вы мо­же­те од­новре­мен­но тэп­нуть 2мя паль­ца­ми по экра­ну для скры­тия\отоб­ра­же­ния ме­ню. Очень удоб­но, если нуж­но рассмот­реть что-то де­таль­но. В на­сто­я­щий мо­мент при­ло­же­ние уме­ет не мень­ше сво­е­го ори­ги­наль­но­го брата от ян­дек­са. Так в чем про­фит, %username%? Про­фит в том, что все это client-side, на­пи­са­но и ра­бо­та­ет на JavaScript, HTML + CSS3, до­бав­лять­ся мо­жет лю­бой функ­ци­о­нал, ка­кой ду­ша по­же­ла­ет. А фей­лы есть? Есть, без фей­лов в на­ше вре­мя ни­ку­да, по­ка что все ра­бо­та­ет с за­мет­ны­ми тор­мо­за­ми, что в прин­ци­пе не ме­ша­ет ис­поль­зо­ва­нию. На 3GS, ду­маю, долж­но во­об­ще иде­аль­но ид­ти, те­сти­ро­ва­лось и пи­са­лось на 3G. Еще од­ним фей­лом яв­ляет­ся landscape-ре­жим, мне по­ка лень его до­де­лы­вать, поэто­му отоб­ра­жа­ет­ся при по­во­ро­те экра­на все смеш­но, неу­доб­но и не­про­пор­ци­о­наль­но. Ис­прав­лю в бли­жайшее вре­мя. В пла­нах - до­бав­ле­ние из­бран­но­го, проклад­ки марш­ру­та меж­ду 2-мя точ­ка­ми и т.п.

Осо­бен­но­сти на­ци­о­наль­ной ебал­ки: нуж­но отдать долж­ное js про­грам­ми­стам ян­дек­са - код их карт и до­ку­мен­та­ция API на­пи­са­ны очень хо­ро­шо и на ай­фо­не все запус­кает­ся без проблем с единствен­ным но: мо­биль­ный safari не зна­ет та­ких дей­ствий, как mousedown, mouseup, mousemove, что де­ла­ет drag-n-drop про­крут­ку кар­ты не­воз­мож­ной. В офи­ци­аль­ной до­ку­мен­та­ции раз­ра­бот­чи­ка web при­ло­же­ний от Apple опи­сы­ва­ют сле­ду­ю­щие по­хо­жие event-ы: touchstart, touchchange, touchend, ко­то­рые по су­ти яв­ляют­ся ана­ло­га­ми мы­ши­ных со­бы­тий с од­ним ис­клю­че­ни­ем, это "много­паль­це­вость" - в callback функ­цию воз­вра­ща­ет­ся event с па­ра­мет­ром-мас­си­вом touches, где каж­дый эле­мент яв­ляет­ся обыч­ным mousevent. В ито­ге все ре­ши­лось обыч­ным initMouseEvent - dispatchEvent для контей­не­ра я.карт, то бишь, от­лав­ли­ва­ем touchstart, бе­рем из не­го пер­вый эле­мент и вы­зы­ва­ем c его зна­че­ни­я­ми mousedown . Для safari mobile есть еще 3 необыч­ных ти­па со­бы­тий - gesturestart, gestureend, gesturechange, ко­то­рые вы­зы­ва­ют­ся при вы­пол­не­ний стан­дарт­ных для ай­фо­на дви­же­ний: щи­па­ния для зу­ма ли­бо же вра­ще­ния 2-мя паль­ца­ми. На них бы­ло успеш­но на­ве­ше­но уве­ли­че­ние\умень­ше­ние масшта­ба кар­ты и скры­тие ме­ню. Еще од­ной пробле­мой яв­ля­лось то, что dblclick не под­дер­жи­вал­ся, яв­ля­ясь си­стем­ным дей­стви­ем для ай­фо­на, при­шлось эму­ли­ро­вать, ра­с­чи­ты­вая ми­кро­тайм меж­ду дву­мя при­кос­но­ве­ни­я­ми к экра­ну. Вот соб­ствен­но и все по осо­бен­но­стям javascript-ов для ай­фо­на, все осталь­ное - ру­ти­на. По­след­нюю вер­сию ко­да мож­но по­смот­реть тут. Ни­ка­кие ли­цен­зии свои­ми дей­стви­я­ми мы не на­ру­ша­ем, т.к. кар­ты отоб­ра­жа­ют­ся имен­но в веб-при­ло­же­нии и ни­ка­кие мо­ди­фи­ка­ции ко­да не про­во­ди­лись.