0

您可以访问实时网站以查看问题是如何发生的。

查看错误的步骤如下

  1. 转到实时网站。
  2. 启用浏览器的位置跟踪。
  3. 单击一个地名,它将打开一个新选项卡。它将显示谷歌地图,并根据 URL 参数将地图居中在您单击的位置。

问题是有时它不是随机工作的,它显示的是纯灰色背景而不是显示地图。如果您尝试刷新或再次单击该地名。地图可能工作。但是如果你突然缩小,它就会崩溃。您需要单击标记或拖动地图,然后您可以毫无问题地缩小。

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

尝试一下。

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.
     } 
4

1 回答 1

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]);

...应该解决它。

于 2012-12-21T09:48:04.987 回答