谷歌.Load从不调用callback
google.load never calls callback
我正在尝试使用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>
这是一个时间问题。
google.setOnLoadCallback()
允许您指定在页面加载时调用的函数。
当你这样使用setTimeout()
时,它会在页面已经加载后调用setOnLoadCallback()
,所以它永远不会调用你的函数。
您可以这样做,而不是使用google.setOnLoadCallback()
:
function loadTheMap() {
google.load("earth", "1.x", {"callback" : init});
console.log('Callback is set');
}
setTimeout(loadTheMap, 200);
我有点困惑,虽然,因为谷歌文档说,动态加载是不支持地球,但我已经看到它在api样本,它为我工作(在Chrome)。
相关文章:
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何从Java/scala调用js美化程序
- 如何调用这个匿名 JavaScript 函数
- 如何从模块链中调用函数.导出到节点中
- 我需要从php调用javascript或jquery
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Twitter Bootstrap typeahead:使用“this”获取上下文/调用元素
- Rails完成了200 OK,但$.ajax()调用'错误'callback而不是'成功;
- node-phantom createPage()从不调用callback
- 如果jQuery.hide()在Deferred回调中被调用,Callback不会触发
- 在异步.直到(test, function, callback)测试函数没有被重复调用
- 显式调用javascript callback
- Opera不调用flash的ExternalInterface.callback()函数在js内部由flash调用的回调
- Cordova -plugin-device-motion插件不调用callback
- 谷歌.Load从不调用callback
- Jquery.post()中从未调用过Callback
- 异步.Filter在所有迭代器完成之前调用callback