Pull to refresh

Отладка Javascript на мобильных устройствах

Reading time 2 min
Views 13K
Как я уже недавно писал, в настоящее время я занимаюсь разработкой мобильной версией одного сервиса. Вчерашняя статья про особенности дизайна сайта для мобильных устройств показала, что у аудитории есть интерес к разработке сайтов, адаптированных под телефоны, коммуникаторы и т.д.

Одним из важных моментов на сайте является динамика, за которую отвечает яваскрипт. К сожалению, полноценной поддержки от мобильных браузеров ждать не приходиться (например, jQuery, Prototype, Ext JS и т.д. не предназначены для браузеров данной категории, хотя надо заметить, что есть версии фреймворков, которые адаптированы под мобильные браузеры на основе WebKit). Но без поддержки популярных библиотек обойтись можно легко, основной недостаток в мобильных браузерах — отсутствие наличия средств отладки яваскрипта (возможно, что на Android, iPhone и др. продвинутых девайсах подобные инструменты есть, но я ориентируюсь на Opera Mini и, к сожалению, IE Mobile).
Интерпретатор Javascript в IE Mobile достаточно капризный, каждый раз вставлять в места возможных ошибок алерты очень неудобно. Коллега по работе подсказал использовать событие onerror:
window.onerror = function () {
 alert('An error has occurred!');
 return true;
};


Затем мы пробовали добавлять аргументы, которые описывают ошибку: номер строки, адрес страницы… Однако, IE Mobile на ошибки все равно не реагировал. Поиск в интернете показал о существовании способа включения режима отладки для IE Mobile путем добавления параметра в реестр Windows Mobile:
Change the Registry setting “HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main” and Create a new DWORD key under Main with the name “ShowScriptErrors“. Set dword value of 1

К сожалению и данный способ также не дал никаких результатов.
В пятницу, когда мне пришлось довольно долго разбираться, где IE спотыкается, я решил обратиться к замечательной книге Д. Флэнагана «JavaScript. Подробное руководство» (вспомнил, что там была глава про отладку JavaScript. Предлагаемый способ совпадал с тем, что предлагали мне на работе, но я решил попробовать еще раз:
window.onerror = function (msg, url, line) {
 alert(msg + "\n" + url + "\n" + "\n" + line);
 return true;
};


И вот, данный вариант сработал! Ошибка была благополучно найдена и исправлена. Непонятно только, почему не помогло в первый раз, возможно, дело было в том, что данная функция сначала была расположена во внешнем js файле, второй раз я разместил ее непосредственно на странице — может быть именно это помогло IE ее использовать.
Надеюсь, что данный опыт кому-то пригодиться :-)
Tags:
Hubs:
+31
Comments 22
Comments Comments 22

Articles