Я получаю эту ошибку при загрузке своей страницы в Safari:
TypeError: Результат выражения
'map.getCenter' [undefined] не является
функция.
Одна и та же страница загружается абсолютно нормально во всех основных браузерах (Chrome, FF и IE).
Я использую Google Maps Javascript API V3 вместе с их Geolocation API.
Кто-нибудь имел эту проблему раньше?
Вот путь к коду:
$(document).ready(function () {
initialize();
});
function initialize() {
var myOptions = {
zoom: 12,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map"), myOptions);
google.maps.event.addListener(map, 'idle', function() {
saveSession();
});
getInitialLocation();
}
function getInitialLocation()
{
// Try W3C Geolocation (Preferred)
if (navigator.geolocation) {
browserSupportFlag = true;
navigator.geolocation.getCurrentPosition(function (position) {
initialLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
map.setCenter(initialLocation);
}, function () {
handleNoGeolocation(browserSupportFlag);
});
// Try Google Gears Geolocation
} else if (google.gears) {
browserSupportFlag = true;
var geo = google.gears.factory.create('beta.geolocation');
geo.getCurrentPosition(function (position) {
initialLocation = new google.maps.LatLng(position.latitude, position.longitude);
map.setCenter(initialLocation);
}, function () {
handleNoGeoLocation(browserSupportFlag);
});
// Browser doesn't support Geolocation
} else {
browserSupportFlag = false;
handleNoGeolocation(browserSupportFlag);
}
function handleNoGeolocation(errorFlag) {
if (!errorFlag)
{
initialLocation = new google.maps.LatLng(geoip_latitude(), geoip_longitude());
map.setCenter(initialLocation);
}
}
}
Вы видите, что idle
связан с saveSession()
function saveSession() {
if ((map != undefined) && (map.getCenter() != undefined)
{
// do stuff
}
}
Но этот код должен запускаться только в том случае, если этот материал НЕ определен. Кроме того, еще раз, это работает во всем, кроме Safari.
РЕДАКТИРОВАТЬ: Запустите это в JFiddle С сафари. Он подойдет и заработает примерно через 5 секунд. Но затем запустите его снова (либо обновите, либо нажмите снова запустить). Это не сработает.
http://jsfiddle.net/gYJrF/1/