启用浏览器位置跟踪时,Google地图会随机崩溃,为什么?

时间:2012-12-21 07:02:18

标签: google-maps crash geolocation

您可以转到live website查看问题是如何发生的。

查看错误的步骤如下

  1. 转到实时网站。
  2. 启用浏览器的位置跟踪功能。
  3. 点击一个地名,它会打开一个新标签。它将显示Google地图并将地图置于您根据网址参数点击的位置。
  4. 问题有时它不是随机工作的,它显示的是纯灰色背景而不是显示地图。 如果您尝试刷新或再次单击地名。地图可能会起作用。 但如果你突然缩小,它会崩溃。您需要单击标记或拖动地图,然后您可以毫无问题地缩小。

    当您关闭浏览器的位置跟踪时,不会发生所有这些问题。

    试试吧。

    PS。不要担心参数的2或3个最后数字。它什么都没有     为了解决这个问题,我已经多次测试过了。控制台日志也不会抛出任何错误。

    这是我启用浏览器位置跟踪时涉及的代码。我的完整代码位于JSFiddle

    function initialize() {
        var myOptions = { zoom: 12, mapTypeId: google.maps.MapTypeId.ROADMAP };
        map = new google.maps.Map(document.getElementById("map"), myOptions);
        var infoWindow2 = new google.maps.InfoWindow({ content: '<div style="overflow:hidden;" id="currentInfoWindow"><p>You are here !!!</p></div>' });
    
        // Try W3C Geolocation (Preferred)
        if(navigator.geolocation) { // BEGIN IF USER ENABLE
          browserSupportFlag = true;
          navigator.geolocation.getCurrentPosition(function(position) { //getCurrentPosition
            querystring = window.location.search.substr(1);
          console.log(querystring);
          element = querystring.split(",");
    
             if (querystring) {
            clickedLocation = new google.maps.LatLng(element[0],element[1]);
            map.setCenter(clickedLocation);
            map.setZoom(18);
          } else {
            initialLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
          }
          //Set map center to be the user's location
          map.setCenter(initialLocation);
    
          //Place the marker of current position
          var markerCurrent = new google.maps.Marker({
            position: initialLocation,
            map: map,
            title:"You are here !!!",
            icon : 'assets/frontend/images/yourmarker.png'
          });
    
          // Attaching a click event to the current marker
          google.maps.event.addListener(markerCurrent, "click", function(e) {
            infoWindow.close();
            this.getMap().setCenter(this.getPosition());
            map.setZoom(12);
            infoWindow2.open(map, markerCurrent);
          });
    
    // IF NOT SUPPORT OR ENABLE >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
          } // End getCurrentPosition
            , function() { handleNoGeolocation(browserSupportFlag); });
        } // END IF Browser doesn't support Geolocation
         else { 
             //Other code here.
         } 
    

1 个答案:

答案 0 :(得分:1)

目前你永远不会遇到这个分支:

else {
initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
} 

因为总有一个QUERY_STRING。

因为initialLocation未设置,但您将其用作setCenter()的参数。

更改此行:

clickedLocation = new google.maps.LatLng(element[0],element[1]);

initialLocation = new google.maps.LatLng(element[0],element[1]);

......应该解决它。