[英]Bing maps is undefined after loading their javascript file
我正在动态加载Bing Map API脚本。 当脚本完成加载时,我想构建我的地图。 问题是Microsoft
和Microsoft.Maps
是定义的,但Microsoft.Maps.Map
不是。 我意识到他们的脚本会异步加载更多的脚本,但即使等待10秒后这些额外的假设脚本, Microsoft.Maps.Map
仍然是未定义的。 那么如何加载他们的Map
类呢? 我在他们的示例中看不到任何明确加载类的内容。
Javascript(原型框架):
var script = new Element(
'script', {
type: 'text/javascript',
src: 'http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0'
}
);
script.observe(
'load',
function(event) {
console.info(Microsoft);
console.info(Microsoft.Maps);
console.info(Microsoft.Maps.Map);
}
);
document.body.appendChild(script);
控制台输出:
>>> Microsoft
Object { Maps={...}}
>>> Microsoft.Maps
Object { Globals={...}}
>>> Microsoft.Maps.Map
undefined
cbayram是对的,你看得太早。 但具体来说,一旦你的脚本完成加载(onscriptload),你就不会使用Bing Map特定的方法来触发你的脚本。 我们避免全局功能,但AFAIK你真的需要在这里使用它。
尝试这个:
var script = new Element(
'script', {
type: 'text/javascript',
src: 'http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0&onscriptload=DrawMap'
}
);
function DrawMap() {
console.info(Microsoft);
console.info(Microsoft.Maps);
console.info(Microsoft.Maps.Map);
}
document.body.appendChild(script);
不重要,但为什么要将它附加到身体上? 我总是追上它。
BING Map API的JavaScript文件动态地将其他JS和CSS文件加载/注入到您的页面中。
<script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/v7.0/7.0.20121012100453.93/js/en-us/veapicore.js">
<script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/v7.0/7.0.20121012100453.93/js/en-us/veapidelay.js">
<link rel="stylesheet" type="text/css" rev="stylesheet" href="http://ecn.dev.virtualearth.net/mapcontrol/v7.0/7.0.20121012100453.93/css/en/mapdelay.css">
<link rel="stylesheet" type="text/css" rev="stylesheet" href="http://ecn.dev.virtualearth.net/mapcontrol/v7.0/7.0.20121012100453.93/css/en/mapcontrol.css">
<script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/v7.0/7.0.20121012100453.93/js/en-us/veapiAnalytics.js">
Map函数/对象似乎是在创建的
http://ecn.dev.virtualearth.net/mapcontrol/v7.0/7.0.20121012100453.93/js/en-us/veapicore.js
编辑:
您的script.observe在加载的第一个(初始)JS文件上运行。 对于Map函数来说太早了,因为它在veapicore.js中实例化,随后由初始mapcontrol.ashx?v = 7.0加载。 您只是在寻找Map对象时太早。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.