Клуб API Карт

Баги сэр?

thekashey
2 февраля 2010, 17:02

вот такая у нас проблемка возникла.

только на одном компе

только в одном браузере( Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.17) Gecko/2009122116 MRA 5.6 (build 03278) Firefox/3.0.17 sputnik unknown )

не работает - maps.yandex.ru, наши карты( 1.1.6 ), примеры из туториала

работает - врезка примеров с главной девеловера( там вроде как 1.0 версия , потому и работает )

никаких багов не будет если включить FireBug. а получаем вот такую картинку


ошибка возникает в YMaps.load

9 комментариев
Подписаться на комментарии к посту
Поставил FF 3.0.17 и Mail.ru Agent 5.6 на чистую виртуальную машину. Проблема не воспроизводится. UserAgent:

Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.17) Gecko/2009122116 MRA 5.6 (build 03278) Firefox/3.0.17 sputnik unknown
может быть что-то попало в кеш?
пробовали очистить?

еще можете привести список аддонов?
они самые  - виноватым был Firebug 1.4.0
сейчас он обновился на 1.4.5 и все окей

но всеже энное колличество народу не грузит яндекс карты.
таймаут на их загрузке.
сейчас попробовал проанализировать логи, вывел не красивые цифири, задумался и пошол проверять систему логирования.
не могло быть 1965 отказов загрузки яндекса на 5к просмотров.. не могло....

да что-то многовато
у нас на картах есть счетчик "не прогрузилось АПИ", он выдает 0,1%, т.е. каждая тысячная загрузка, но точной развесовки причин нет: часть с медленных соединений отваливается по таймоуту, часть с неподдерживаемыми браузерами, часть неизвестно что
посмотрите на свой лог повнимательней, если ваша цифра подтвердится нужно будет обязательно разобраться
кстати несколько финтов для правильной загрузки Яндекс карт я могу уже огласить:

1.Если вы подключили яндекс карты с отложеной загрузкой - это не значит что они есть.
при запуске проверяется window.YMaps - и если его нет делается перезапуск через 10 милисекунд.
В большистве случаев стартует с первого раза, но иногда(на самом деле часто, особенно в вэбкитах ) и с 6ого

2.Всегда запускать YMaps.load через setTimeout чтобы отвязаться от текушего контекста( пару багов исправило )

3.Всегда запускать функцию которую передает в YMaps.load опять же через Timeout чтобы отвязаться от контекста YMaps

4.Самый жесткий трик - перед загрузкой YMaps переопределяем document.write на записывание текста в какойнить innerHTML. Если у вас это заглушка для ие( только всеже зачем надо было ее делать через document.write ) у нас это невозможность загрузки карты по требованию
По воводу 1, 2, 3 не могли бы вы привести пример(ы) кода, который бы демонстрировал ситуацию в которой возможны ошибки.
Что касается четвертого, то document.write используется только при подключение карт как единого блока, и именно поэтому document.write, чтобы сразу после тега
по поводу последнего -
http://api-maps.yandex.ru/1.1.6/?loadByRequire=1&key=AGQ2AUsBAAAAmkDAUgIAKaxbghLGm6-TdVCmVfNW6N-FdhoAAAAAAAAAAAA8xKqw6k6Q0nyrXOQ-xOWiLsILmA==
смотрим на строчку номер 4
а у нас есть один момент когда карты реально грузиться отложено

1.можно словить на domReady, редко, реально редко. Но у нас тестеры просто ЗВЕРИ

2.Ругалось на Internal.MapData, сутя по всему из-за того что этот интернал задается не в window
если запускать из контекста window ( таймаут ) - все окей.
баг проявился через несколько недель активного тестинга, но был стабилен.
Правда как его вызвать - честно говоря забыли

3.Это старая бага -
3.1 в контексте этот функции, так как она вызвана от вас живет ВАШ jquery, хорошо если просто версии разные, а если у меня либ-прототип?
3.2 любой ексешен в функции и креш загрузки. в том числе безобидные эксешены

ПС:эх не остался я тогда на "особености евентов на картах", о чом сейчас и сожалею.
командер - ответь на вопрос - зачем вы глушите в себе события mousemove, и как мне это обойти без грязных хаков( все браузеры кроме ФФ при попадании мышки в область Я.карт теряют мои обработчики mousemove, ФФ не теряет так как тама useCapture )
Тут такое дело, расчитывалось, что этот первый  загрузочный скрипт будет подключаться все таки синхронно, а уже остальное подгружается по требованию. Но раз пошло такое дело, постараемся это место переписать.
Про остальное подумаю, спасибо за описание.

А мы вообще глушим все события мыши. Делаем это чтоб исключить коллизии при двойной обработки событий. На данный момент единственным способом ловить эти события это ловить их в карте, как MouseMove или как BeforeMouseMove если хочешь совсем все, включая например мувы драга и над метками, а потом вручную их транслировать выше.

Вообще мы думали над тем чтоб пересмотреть нашу политику работы с событиями, но в данный момент хорошего решения нет. Например что делать с hotkeys, если их не стопить, а в документе их тоже слушают, но для другого, получится двойное срабатывание. Или другой пример на странице показывается меню по правой кнопке, а у нас по двойному клику правой масштабирование. Можно конечно сказать, что тот кто слушает на документе может отследить цель события, но ведь это автоматически означает, что вставка карт на страницу потребует изменения окружения, что плохо. Пока в голову приходит только дополнительная опция не стопить события(default false), чтоб сложности только для тех кому надо. Есть предложения?


в данном частном случае глюк происходит когда мышка именно что над яндекс картами, а она туда попадает при быстром драгание елемента( контрол ресайза карты, либо ручками сделаное драгание обьекта на карте )
Самый простой способ( на мой взгяд ) это добавить команду YMaps.shutup() ну или YMaps.noconflict()
а пока приходиться перетирать стандартные attachEvent и обрататывать их ручками.

Кстати, совсем забыл - первым делом я попробовал залесть в YMaps.Events и сделать им всем disable( непомолго :) ) - так вот, заметил что функции isEnabled - нету :)