2012-08-09 133 views
2

我正在开发一个小部件,以显示一些数据从我的网站到其他人。为此,我必须通过javascript createElement方法动态加载一些脚本文件。这是我的代码。谷歌地图加载问题使用javascript createElement

<script language="javascript" type="text/javascript"> 
var script = document.createElement('script'); 
script.onload = function() { 
//initMap(); 
}; 
script.src = "http://maps.google.com/maps/api/js?sensor=false"; 
document.getElementsByTagName('head')[0].appendChild(script); 
function initMap() 
{ 
var myLatlng = new google.maps.LatLng(-25.363882,131.044922); 
var mapOptions = { 
zoom: 12, 
center: myLatlng, 
mapTypeId: google.maps.MapTypeId.ROADMAP 

}; var map = new google.maps.Map(document.getElementById(“map_canvas”),mapOptions);

var marker = new google.maps.Marker({ 
    position: myLatlng, 
    map: map, 
    title:"Hello World!" 
}); 
} 
$(document).ready(function(){ 
initMap(); 
}); 
</script> 

此代码既不在script.onload函数中初始化映射,也不在document.ready上初始化映射。提前致谢。

回答

1

我不知道为什么,但似乎谷歌地图api没有完全加载时动态加载。 相反,你可以使用Google Loader https://developers.google.com/loader/ 哪个好。

这里是你修改<script>

var script = document.createElement('script'); 
script.src = "https://raw.github.com/getify/LABjs/master/LAB.min.js"; 
script.onload = function() { 
    $LAB 
     .script('http://code.jquery.com/jquery-1.8.0.min.js') 
     // .script('...') // other scripts which DO NOT depend on maps API 

     // if script X depends on jquery for example, it must be loaded like this: 
     // .wait() // this makes sure scripts above (jquery) are loaded before continuing 
     // .script('X') 
     .script('https://www.google.com/jsapi') 
     .wait(function() { 
      // this is called after everything above is loaded 
      google.load("maps", "3", 
       { 
        "callback" : onMapsLoad, // called when maps api loaded 
        "other_params": "sensor=false" 
       }); 
     }); 
}; 
document.getElementsByTagName('head')[0].appendChild(script); 

function onMapsLoad() { 
    $LAB 
     // add here scripts which DEPEND on Maps API 
     .script('https://google-maps-utility-library-v3.googlecode.com/svn/trunk/infobox/src/infobox.js') 
     .wait(
      function() { 
       // called when all above is loaded 
       $(function() { // makes sure DOM is ready 
        initMap(); 
       }); 
      } 
     ); 
} 

function initMap() 
{ 
var myLatlng = new google.maps.LatLng(-25.363882,131.044922); 
var mapOptions = { 
zoom: 12, 
center: myLatlng, 
mapTypeId: google.maps.MapTypeId.ROADMAP 
}; var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); 

var marker = new google.maps.Marker({ 
    position: myLatlng, 
    map: map, 
    title:"Hello World!" 
}); 
} 
+0

非常感谢它现在工作的罚款。但是我必须在jquery,谷歌地图,信息框和fancybox已经加载时调用地图函数,并且我陷入了它。如果我提出任何不相关的问题,我很抱歉。但它对我来说很难。提前致谢。 – aishazafar 2012-08-09 18:20:18

+0

您可以使用http://labjs.com/进行脚本加载。不要使用'jsapi'创建脚本标记,而应将https://raw.github.com/getify/LABjs/master/LAB.min.js然后放在'onload'处理程序中执行如下操作: '$ LAB 。脚本('http://code.jquery.com/jquery-1.8.0.min.js') /* .script('...')其他需要的脚本*/ .script('https:// www.google.com/jsapi') .wait(function(){ ... });' 无论你放入'wait()'回调函数,都会在加载所有脚本后执行。你应该在那里放置'google.load'。 – Cleric 2012-08-10 07:05:01

+0

非常感谢。它的工作正常,当我加载本地脚本,但它不正确加载谷歌地图API和infobox.js :(。 – aishazafar 2012-08-11 18:36:18