为什么谷歌地图代码阻止了我的其他js脚本?

时间:2011-01-17 14:44:17

标签: php javascript

就像在标题中一样 - 为什么谷歌地图代码会阻止我的其他js脚本?我在标题中有以下代码:

<script type="text/javascript">

  /* Sets up the map with markers */
  function starter() 
  {
    var latlng = new google.maps.LatLng(38.60427939057251, -9.07470703125);

    var myOptions = {
      zoom: 4,
      center: latlng,
      navigationControl: true,
      scaleControl: false,
      mapTypeId: google.maps.MapTypeId.ROADMAP
  };

    var map = new google.maps.Map(document.getElementById("tab14"), myOptions);

      /* Sets up markers */    
      markers = []; 

      infoWindow = new google.maps.InfoWindow();              

      for (var i = 0, coordinates; coordinates = data.coords[i]; i++) 
      {             
                  var iconImage = new google.maps.MarkerImage("http://map.lgfl.org.uk/images/arrow_green.png");
                  var LatLng = new google.maps.LatLng(coordinates.latitude, coordinates.longitude);
                  var marker = new google.maps.Marker({position: LatLng, icon: iconImage });

                  var contentString = '<div>'+ 
                                      '<a href='+coordinates.url+'><h4>'+coordinates.title+'</h4></a>'+
                                      '<div>'+
                                      '<p><a href='+coordinates.url+'>'+coordinates.excerpt+'</a></p>'+
                                      '</div>'+
                                      '</div>';

                  addMarker(marker, contentString);
                  markers.push(marker);
      }

      /* Sets up marker clusterer */
      var markerCluster = new MarkerClusterer(map, markers); 

      function addMarker(marker, content)
      {
         google.maps.event.addListener(marker, 'click', function() {
                         infoWindow.setContent(content);
                         infoWindow.open(map, marker);
         });
      }

  }

window.onload = starter;
</script>

现在,当我想要包含任何其他js代码来在页面上执行不同的操作时,由于此代码,它不会执行此操作。当我注释掉window.onload = starter line时,一切正常。有人可以告诉我这里我做错了什么吗?

3 个答案:

答案 0 :(得分:1)

确保starter函数中没有任何错误,很可能是你的地图画布(你没有带有此ID的元素):

document.getElementById("tab14")

或您的data对象:

for (var i = 0, coordinates; coordinates = data.coords[i]; i++)

我看不出你在哪里设置它。

编辑:
根据您的问题的评论,您似乎覆盖了onload方法,只是这不起作用:

window.onload = func1;
window.onload = func2;

这只会执行func2方法!
试试这个:

function func1() {
  alert("This is the first.");
}

function func2() {
  alert("This is the second.");
}


function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

addLoadEvent(func1);
addLoadEvent(func2);

addLoadEvent(function() {
    document.body.style.backgroundColor = '#EFDF95';
})

SOURCE

答案 1 :(得分:1)

window.onload是单个函数入口点。无论哪一段代码设置它最后定义了将执行的唯一代码。你需要做的是使用某种框架(比如jQuery),它将设置一个文件加载后执行的函数队列(ready函数实质上设置了一个要调用的函数列表),或者自己写一下。

以下是一个例子:

function addLoadHandler(func) {
    var oldEventHandler = window.onload;
    window.onload = function() {
        if (oldEventHandler) {
            oldEventHandler();
        }
        func();
    };
}

答案 2 :(得分:0)

谷歌地图确实会引发一些关于其iframe尝试访问您网页的错误。尝试将Google代码移动到页脚中,以便最后加载它。