美文网首页@IT·互联网虾写前端让前端飞
使用requirejs 调用百度地图解决方案

使用requirejs 调用百度地图解决方案

作者: lancelot_lewis | 来源:发表于2016-05-24 14:01 被阅读0次

百度地图的模块化加载方案

百度地图的加载方式比较奇葩,比如百度提供的一个 js 脚本地址是这样http://api.map.baidu.com/api?v=2.0&ak=mXijumfojHnAaN2VxpBGoqHM,直接使用浏览器访问,这个文件的内容是这样:

(function () {
    window.BMap_loadScriptTime = (new Date).getTime();
    document.write('<script type="text/javascript" src="http://api.map.baidu.com/getscript?v=2.0&ak=mXijumfojHnAaN2VxpBGoqHM&services=&t=20160503160001"></script>');
})();

百度地图通过一个脚本再去请求另外一个脚本,这样的方式可能是我见的少吧,感觉这样会比较安全。
在直接访问后面这个网址,得到的就是真正的百度地图api文件了。

看起来好像直接转成 requirejs 加载的方式没有问题,那就试试?

// requirejs 的配置,因为百度地图是非AMD模式的,所以需要加上shim进行转换
require.config({
    paths: {
        'BMap': ['http://api.map.baidu.com/api?v=2.0&ak=mXijumfojHnAaN2VxpBGoqHM'],
    },
    shim: {
        'BMap': {
            deps: ['jquery'],
            exports: 'BMap'
        }
    }
});
// 调用百度地图
define(['jquery','BMap'], function(){
    var map = new BMap.Map("map");
});

来了来了,控制台非常精准的出现了错误:

Failed to execute 'write' on 'Document': It isn't possible to write into a document from an asynchronously-loaded external script unless it is explicitly opened.

ReferenceError: BMap is not defined(…)

define

Uncaught ReferenceError: BMap is not defined

第一个和第四个是控制台打印出来的错误信息,中间两个是 requirejs 打印出来的错误信息。其中第一个错误只是黄色的感叹号(因为当前请求的文件已经加载,大概是提醒你异步加载的文件是不能再请求脚本的);最后一个错误是红色的叉,因为这里找不到BMap这个对象。

好了,大概问题知道了。如何解决?

经过大量的查找,发现 requirejs 有async这样一个插件,附上 requirejs 插件列表:https://github.com/requirejs/requirejs/wiki/Plugins
这个插件可以使当前加载的 js 脚本采用异步的方式加载更多的脚本文件,官方原话是这样的:

async : Useful for JSONP and asynchronous dependencies (e.g. Google Maps).

所以配置好 async.js

require.config({
    paths: {
        'async': '../../lib/require/async'
    }
}

调用百度地图的时候这样写:

// 调用百度地图
define(['jquery','async!BMap'], function(){
    var map = new BMap.Map("map");
});

这样就能成功的使用模块化的技术调用百度地图了

附上个人博客对应博文地址:
http://lancelot_lewis.coding.me/2016/05/24/requirejs/requirejs-map/

相关文章

  • 使用requirejs 调用百度地图解决方案

    百度地图的模块化加载方案 百度地图的加载方式比较奇葩,比如百度提供的一个 js 脚本地址是这样http://api...

  • Echart百度地图使用

    本文主要叙说了百度地图的两种用法:1 在页面上直接调用百度地图API,显示地图2 使用Echart框架可视化加载百...

  • 使用协议方法实现百度地图SDK的调用

    使用协议方法实现百度地图的调用首先导入百度SDK,百度SDK可以手动导入,也可以使用cocoaPods进行导入创建...

  • 调用地图app或网页版地图

    通过链接调用百度地图app或者高德地图app 百度地图 "http://api.map...

  • 百度地图调用api

    1.注册百度地图用户 2.百度地图中创建应用,获取ak值 3.调用 (1)调用百度地图api 在应用中填写自己获取...

  • 地图

    Android调用第三方地图,高德地图,百度地图!

  • iOS百度地图使用时不弹出系统定位权限框

    整理下在使用百度地图的过程中新发现的问题,在首页中我正常调用了百度地图iOS的API,代理也正常返回,但是在使用过...

  • 百度地图API调用

    调用百度地图的API可以非常方便的实现我们需要的地图的功能,今天研究了一下调用百度地图API,显示定位信息、地图标...

  • 各大地图厂商服务使用条款

    百度地图静态图API使用条款和限制请求频率:无限制调用次数:默认限制为100万次/天,并发100qps百度地图其他...

  • 8.25兄弟会

    js调用百度地图api实现定位 百度地图的API,接口很丰富,实现定位功能 // 百度地图API功能 varmap...

网友评论

    本文标题:使用requirejs 调用百度地图解决方案

    本文链接:https://www.haomeiwen.com/subject/rqszrttx.html