Roy*_*y J 3 javascript load callback google-earth-plugin
我正在尝试使用Google Earth插件,并且发现它的调用方式非常特别:如果在Javascript执行的主要流程之外调用(例如通过setTimeout),它只是拒绝调用负载打回来.以下示例是自包含的插图.更改更改最后两行中的哪一行被注释掉以查看它是否有效.
这是怎么回事?
<html>
<head>
<title>Sample</title>
<script type="text/javascript" src="https://www.google.com/jsapi"> </script>
<script type="text/javascript">
var ge;
function init() {
console.log('Initing');
function cb(instance) {
ge = instance;
ge.getWindow().setVisibility(true);
console.log('Ok');
};
function fail() {}
google.earth.createInstance('map3d', cb, fail);
}
function loadTheMap() {
google.load("earth", "1.x");
google.setOnLoadCallback(init);
console.log('Callback is set');
}
//loadTheMap(); // works
setTimeout(loadTheMap, 200); // Does not work
</script>
</head>
<body>
<div id="map3d" style="height: 400px; width: 600px;"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是一个时间问题.
google.setOnLoadCallback() 允许您指定页面加载时调用的函数.
当您使用setTimeout()这样的时候,它在页面已经加载setOnLoadCallback() 后调用,因此它永远不会调用您的函数.
而不是使用google.setOnLoadCallback()你可以这样做:
function loadTheMap() {
google.load("earth", "1.x", {"callback" : init});
console.log('Callback is set');
}
setTimeout(loadTheMap, 200);
Run Code Online (Sandbox Code Playgroud)
我有点困惑,因为谷歌文档说地球不支持动态加载,但我已经在api示例中看到它,它适用于我(在Chrome中).