异步加载JS不允许document点write解决办法 百度地图API

只需要把要加载的js放到body标签结束之前就可以了,
这样body中的东西全加载好了,而且document也没有关闭,
就趁这个时候把东西写到document里,
尤其是百度地图API,导那个包就得这么导
在这里插入图片描述

<div id="allmap" style="width: 1000px;height: 618px" ></div>





<!--放在这里可以解决document.write在加载完成之后无法执行的问题-->
<!--    百度地图核心js-->
<script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=tCTdNSXmhpUzvDU1aXMZOqaYDL5rckvc" ></script>
<!--  百度地图MAPV插件  -->
<script src="http://mapv.baidu.com/build/mapv.js"></script>
<script type="text/javascript">

    // 百度地图API功能
    var map = new BMap.Map("allmap", {
        //禁用鼠标点击事件
        enableMapClick: false
    });    // 创建Map实例


    // 左下角,添加比例尺
    var top_left_control = new BMap.ScaleControl({anchor: BMAP_ANCHOR_BOTTOM_LEFT});
    //左上角,添加默认缩放平移控件
    var top_left_navigation = new BMap.NavigationControl();
    map.addControl(top_left_control);      // 测距离的
    map.addControl(top_left_navigation);   // 左导航默认


    map.centerAndZoom(new BMap.Point(105.403119, 38.028658), 5);  // 初始化地图,设置中心点坐标和地图级别
    map.enableScrollWheelZoom(true); // 开启鼠标滚轮缩放

    map.setMapStyle({
        style: 'light'
    });

    var randomCount = 300;

    var data = [];

    var citys = ["北京","天津","上海","重庆","石家庄","太原","呼和浩特","哈尔滨","长春","沈阳","济南","南京","合肥","杭州","南昌","福州","郑州","武汉","长沙","广州","南宁","西安","银川","兰州","西宁","乌鲁木齐","成都","贵阳","昆明","拉萨","海口"];

    // 构造数据
    while (randomCount--) {
        var cityCenter = mapv.utilCityCenter.getCenterByCityName(citys[parseInt(Math.random() * citys.length)]);
        data.push({
            geometry: {
                type: 'Point',
                coordinates: [cityCenter.lng - 2 + Math.random() * 4, cityCenter.lat - 2 + Math.random() * 4]
            },
            count: 30 * Math.random()
        });
    }

    //创建点数据集
    var dataSet = new mapv.DataSet(data);

    var options = {
        fillStyle: 'rgba(255, 50, 50, 0.6)',
        shadowColor: 'rgba(255, 50, 50, 1)',//加上和去掉效果差不多
        // shadowBlur: 30,  //模糊效果
        globalCompositeOperation: 'lighter',
        methods: {
            //每个点的点击事件
            click: function (item) {
                console.log(item);
            }
        },
        size: 5,
        draw: 'simple'
    }

    var mapvLayer = new mapv.baiduMapLayer(map, dataSet, options);

    // dataSet.set(data); // 修改数据

    // mapvLayer.show(); // 显示图层
    // mapvLayer.hide(); // 删除图层
</script>
</body>

</html>

百度地图的js异步加载会出现这个错误,没关系,只要把它的加载放到head标签里,并且改成同步加载就行了。
有两个关键点:
由于document.write()必须在body标签结束之前执行,所以异步加载不能做到,而百度地图api就得用document.write(),这是根本矛盾。

所以,把百度地图的js放到head标签里,或者放到body标签结束之前,都是可以解决document.write()问题的。
并且,这个js的加载方式改为同步即可。

然而,百度地图API依然很坑,它会出现这个错误:
在这里插入图片描述
这个错误是不影响使用的,只是不太美观,只要把百度地图相关组件放入一个iframe再放到主页面中,主页面就不会输出这个错误了。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值