[英]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.