InvalidValueError:setMap:不是Map的实例,不是StreetViewPanorama的实例

时间:2014-05-28 07:48:06

标签: javascript google-maps safari

当我通过浏览器测试我的网站并在Safari中尝试它时,我的仪表板中的此错误无处不在。它适用于Chrome,Firefox和IE9,但在Safari中:

这是错误,我不知道这发生在哪里

InvalidValueError: setMap: not an instance of Map, and not an instance of StreetViewPanorama     main:25

这是Initialize函数:

var map;

    function initialize() {

        geocoder = new google.maps.Geocoder();
        geocode = new google.maps.Geocoder();

        LatLang = new google.maps.LatLng(38.50, -90.50);
        var addresse = {
            zoom: 4,
            center: LatLang,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById('map'), addresse);

        // Bounds for North America
        var strictBounds = new google.maps.LatLngBounds(
                  new google.maps.LatLng(15.70, -160.50),
                  new google.maps.LatLng(68.85, -55.90));

        // Listen for the dragend event
        google.maps.event.addListener(map, 'dragend', function () {
            if (strictBounds.contains(map.getCenter())) return;
            // We're out of bounds - Move the map back within the bounds

            var c = map.getCenter(),
                  x = c.lng(),
                  y = c.lat(),
                  maxX = strictBounds.getNorthEast().lng(),
                  maxY = strictBounds.getNorthEast().lat(),
                  minX = strictBounds.getSouthWest().lng(),
                  minY = strictBounds.getSouthWest().lat();

            if (x < minX) x = minX;
            if (x > maxX) x = maxX;
            if (y < minY) y = minY;
            if (y > maxY) y = maxY;

            map.setCenter(new google.maps.LatLng(y, x));
        });

        // Limit the zoom level
        google.maps.event.addListener(map, 'zoom_changed', function () {
            if (map.getZoom() < minZoomLevel) map.setZoom(minZoomLevel);
        });

    }

1 个答案:

答案 0 :(得分:-1)

你需要了解一些徒步旅行,并且javascripts夸耀解决这个问题。

var t = 5;
var t
console.log(t) //undefined in chrome, firefox, etc. But 5 in safari.

您还应该知道,在新的html5规范中,如果您有类似<div id="map"></div>的内容,则会创建全局变量mapwindow.map

在您的代码中,我看到您将map定义为全局变量(可能在那里进行调试)。

如果在呈现<body>...</body>之后运行此脚本,其中包含<div id="map"></div>window.map或(全局map)初始化为"<div id="map"></div>",以及何时您再次在Safari中声明var mapmap变为<div id="map"></div>,在其他浏览器中变为undefined

这是错误的原因。要解决此问题,请将id更改为map以外的其他内容,或者将此声明为全局变量时执行var map = "";。或者,在正文之前运行脚本。