Javascript bing将v7映射到v8迁移-脚本导入问题

Javascript bing将v7映射到v8迁移-脚本导入问题,javascript,web,bing,bing-maps,Javascript,Web,Bing,Bing Maps,好的,我已经四处寻找解决方案,我相信有人会说这是一个重复的话题,但我很困惑为什么这不起作用 这是我现在拥有的代码的一个基本示例 main.html 控制台输出 我可以得到一个基本的示例,但是当我尝试创建脚本元素并附加它的方法时,我什么也得不到。由于这是它在v7中的大型应用程序中实现的方式,所以我不会尝试重新构建它 我尝试过jquerygetscript之类的东西 请让我知道你的想法!!!谢谢。我想说的第一件事是,您可能应该从公开发布的问题中删除您的凭据。只是一个想法 其次,错误是由于在加载映射之

好的,我已经四处寻找解决方案,我相信有人会说这是一个重复的话题,但我很困惑为什么这不起作用

这是我现在拥有的代码的一个基本示例

main.html

控制台输出

我可以得到一个基本的示例,但是当我尝试创建脚本元素并附加它的方法时,我什么也得不到。由于这是它在v7中的大型应用程序中实现的方式,所以我不会尝试重新构建它

我尝试过jquerygetscript之类的东西


请让我知道你的想法!!!谢谢。

我想说的第一件事是,您可能应该从公开发布的问题中删除您的凭据。只是一个想法

其次,错误是由于在加载映射之前试图与映射交互

我个人以前从未见过以这种方式加载脚本,但我想它是有效的——至少在某些情况下是有效的,但这次可能不行。我想你这样做是有原因的

无论如何,由于我对它缺乏了解,我只能假设正在发生的事情是,正在加载脚本,并且正在调用回调test_函数,正如代码所显示的那样

然而,我怀疑,在本例中,加载的脚本和加载的Bing地图是两件不同的事情

最初用&callback=GetMap注释掉的url是异步加载Bing映射的有文档记录的方式。一旦完成加载,Bing Maps将调用您的GetMap函数。有了这段代码,callback=test_函数就是您想要的

所以test_函数应该由Bing映射本身启动,而不是再次通过脚本加载函数,假设它是如何工作的。我猜,加载函数实际上不想做任何事情,只想让脚本就位,所以没有回调方法;必应地图将为您处理此问题

这里有一个关于它工作的例子

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <script type="text/javascript" src="main.js"></script>
</head>

<body>
    <div id="myMap" style="position:relative;width:600px;height:400px;"></div>
</body>
<script>
    var url = 
    //'http://www.bing.com/api/maps/mapcontrol?branch=experimental&callback=GetMap';
    'https://www.bing.com/mapspreview/sdk/mapcontrol';
    loadScript(url, test_function);
    function test_function() {
        console.log('inside test_function before map');
        map = new Microsoft.Maps.Map('#myMap', {
            credentials: 'My Bing Maps Key'});
        console.log('inside test_function after map');
    };
</script>

</html>  
function loadScript(url, callback){

    var script = document.createElement("script")
    script.type = "text/javascript";
    script.async = true;
    script.defer = true;

    if (script.readyState){  //IE
        console.log('inside IE block');
        script.onreadystatechange = function(){
            if (script.readyState == "loaded" ||
                    script.readyState == "complete"){
                script.onreadystatechange = null;
                callback();
            }
        };
    } else {  //Others
        console.log('inside Other block');
        script.onload = function(){
            callback();
        };
    }

    script.src = url;
    document.getElementsByTagName("head")[0].appendChild(script);
}
main.js:18 inside Other block
main.html:17 inside test_function before map
mapcontrol:11 Uncaught TypeError: Cannot read property 'prototype' of null
    at k (mapcontrol:11)
    at n.h [as create] (mapcontrol:11)
    at e (mapcontrol:11)
    at t.l [as instance] (mapcontrol:11)
    at n.h [as create] (mapcontrol:11)
    at e (mapcontrol:11)
    at t.l [as instance] (mapcontrol:11)
    at new Microsoft.Maps.Map (mapcontrol:13)
    at test_function (main.html:18)
    at HTMLScriptElement.script.onload (main.js:20)