2012-02-23 3 views
0

я загружаю Google Maps API динамически с помощью этой функции:Android браузер не загружает API Карт Google на перезагрузки страницы

App.prototype.loadScript = function(src) { 
    $(document.createElement("script")).attr({ 
    type: "text/javascript", 
    src: src 
    }).appendTo("body"); 
}; 

я прохожу этот URL в качестве аргумента:

"//maps.googleapis.com/maps/api/js?v=3.8&sensor=false&language=" + locale + "&callback=window.app.googleMapsCallback" 

It отлично работает при первом загрузке страницы, и срабатывает обратный вызов. Однако, когда я перезагружаю страницу на Android, window.app.googleMapsCallback делает не огонь. Он отлично работает в Chrome и в браузере iOS.

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

Как я могу убедиться, что обратный вызов всегда срабатывает?

UPDATE:

После дальнейшего тестирования, очистка кэша и перезагрузка не работает. Мне нужно очистить все данные браузера (через Настройки -> Приложения -> Управление приложениями), чтобы перезагрузить страницу.

Использование функции верхнего уровня в качестве обратного вызова не имеет значения.

Ошибок JavaScript при перезагрузке.

Следует отметить, что я использую HTC Evo 4G с Android 2.3.4, и мое приложение построено с помощью jQuery Mobile.

+0

Мне любопытно, можете ли вы попробовать более простую функцию обратного вызова, например функцию верхнего уровня, которая запускает окно предупреждения? – bamnet

ответ

1

Я пытался воспроизвести вашу проблему с помощью эмулятора Android (обе версии 2.3.3 и 2.3.5, нет версии 2.3.4, извините), но я не смог. Обратный вызов отлично работает при перезагрузке каждой страницы.

Это тест jsfiddle: http://jsfiddle.net/MartinodF/gbAuL/. Он включает только минимальный код для проверки вашей проблемы и исключения из него зависит от чего-то еще в вашей базе кода.

Не могли бы вы попробовать это на своем телефоне? Нажмите «Отладка на мобильном телефоне» (кнопка справа от «Выполнить» в верхней строке) в jsfiddle и откройте URL-адрес, который он дает вам (что-то вроде http://jsfiddle.net/m/ABC) в браузере Android. Вы должны получить всплывающее сообщение «callback called». Попробуйте перезагрузить страницу и посмотрите, работает ли она.

Если это не так, то я могу попробовать и получить доступ к защищенному устройствам HTC Sense 2.3.4 для дальнейшего тестирования.

+0

К счастью, кнопка «Отладка на мобильном телефоне» не отображалась для меня, и мне пришлось скопировать код в автономный тест, который показал мне, что обратный вызов вообще не срабатывает. Немного подумав, я понял, что событие jQuery Mobile mobileinit срабатывает _before_, DOM готов, поэтому я слишком рано загружал скрипты (на mobileinit). На перезагрузке страницы из-за того, что я в кеше полагаю, это привело к тому, что API Карт Google не был загружен. Спасибо за вашу помощь! –

+0

Добро пожаловать, я рад, что вы это поняли! – MartinodF

Смежные вопросы