tch*_*hap 9 javascript here-api
我正在尝试异步加载Nokia Maps javascript API:
var oScript = document.createElement('script');
oScript.type = 'text/javascript';
oScript.async = true;
oScript.src = "http://api.maps.nokia.com/2.2.3/jsl.js?with=maps,positioning,placesdata";
document.body.appendChild(oScript);
Run Code Online (Sandbox Code Playgroud)
按照预期,它不会马上工作,所以我尝试重写document.write认为可能是问题,无济于事(例如,我做了这个/sf/answers/551908521/) .
我遇到的错误是基本上没有定义nokia.maps.map(因此,我无法使用以下方法创建地图:
new nokia.maps.map.Display();
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点,或有人曾经设法这样做?我可能会遗漏一些东西
编辑:我实际上是尝试在页面中异步编写脚本,而不是异步创建映射(当然这不是问题)
谢谢,
适用于JavaScript的HERE Maps API(3.0)
较新的3.0 HERE Maps API for JavaScript非常模块化,完全支持异步加载.例如,可以使用requirejs加载一个简单的映射,如下所示:
require(['mapsjsService','mapsjsEvents', 'mapsjsUi'], function () {
var platform = new H.service.Platform({
app_id: '<YOUR APP ID>',
app_code: '<YOUR TOKEN>'
});
var defaultLayers = platform.createDefaultLayers();
var map = new H.Map(document.getElementById('map'),
defaultLayers.normal.map);
var behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
var ui = H.ui.UI.createDefault(map, defaultLayers);
});
Run Code Online (Sandbox Code Playgroud)
需要按如下方式分配配置文件:
requirejs.config({
baseUrl: '.',
waitSeconds: 0,
map: {
'*': {
'css': 'require-css' // or whatever the path to require-css is
}
},
paths: {
'mapsjsCore' : 'https://js.api.here.com/v3/3.0/mapsjs-core',
'mapsjsService' : 'https://js.api.here.com/v3/3.0/mapsjs-service',
'mapsjsEvents' : 'https://js.api.here.com/v3/3.0/mapsjs-mapevents',
'mapsjsUi' :'https://js.api.here.com/v3/3.0/mapsjs-ui',
'mapsjsCss' :'https://js.api.here.com/v3/3.0/mapsjs-ui',
},
shim: {
'mapsjsService': {
deps: ['mapsjsCore']
},
'mapsjsEvents': {
deps: ['mapsjsCore']
},
'mapsjsUi': {
deps: ['mapsjsCore', 'css!mapsjsCss']
}
}
});
Run Code Online (Sandbox Code Playgroud)
可以看出,所有模块都依赖于mapsjsCore,但子模块中没有一个依赖于彼此.这mapsjsUi是一种特殊情况,因为它具有默认外观的关联CSS文件.您可以在标头中保留默认的CSS(或覆盖),也可以使用requirejs插件(例如require-css)加载它.应该注意的waitSeconds:0是,配置中需要该行以避免在首次将HERE Maps for JavaScript库下载到浏览器时超时,因为它们不会在本地找到,因此您依赖于Internet连接的速度至少一次.
或者使用Jquery:
$.getScript('https://js.api.here.com/v3/3.0/mapsjs-core.js', function() {
$.getScript('https://js.api.here.com/v3/3.0/mapsjs-service.js', function() {
$.getScript('https://js.api.here.com/v3/3.0/mapsjs-mapevents.js', function() {
$.getScript('https://js.api.here.com/v3/3.0/mapsjs-mapevents.js', function() {
////
//
// Don't forget to set your API credentials
//
var platform = new H.service.Platform({
app_id: 'DemoAppId01082013GAL',
app_code: 'AJKnXv84fjrb0KIHawS0Tg',
useCIT: true
});
//
//
/////
var defaultLayers = platform.createDefaultLayers();
var map = new H.Map(document.getElementById('map'),
defaultLayers.normal.map, {
center: {
lat: 50,
lng: 5
},
zoom: 4
});
var behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
var ui = H.ui.UI.createDefault(map, defaultLayers);
});
});
});
});Run Code Online (Sandbox Code Playgroud)
body {
margin: 0;
padding: 0;
}
#map {
width: 100%;
height: 100%;
position: absolute;
overflow: hidden;
top: 0;
left: 0;
}Run Code Online (Sandbox Code Playgroud)
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<meta name="viewport" content="initial-scale=1.0, width=device-width" />
<link rel="stylesheet" type="text/css"
href="http://js.api.here.com/v3/3.0/mapsjs-ui.css" />
</head>
<body>
<div id="map"></div>
</body>
Run Code Online (Sandbox Code Playgroud)
Nokia Maps API for JavaScript(2.2.4-2.5.4)
在最近过时的诺基亚地图API的JavaScript的(2.2.4及以后版本)版本支持异步加载,如下图所示
详细信息可以在API Reference Feature.load的Feature.load方法中找到,其中有两个成功的回调(您可以继续添加App ID和令牌,显示地图等,以及一个失败.
// this is our initial script that will load jsl.js
var oScript = document.createElement("script"),
//once the jsl.js is load, we load all features
onScriptLoad = function() {
nokia.Features.load(
// here we get all features (provide one or many "with" parameters
nokia.Features.getFeaturesFromMatrix(["all"]),
// an callback when everything was successfully loaded
onApiFeaturesLoaded,
// an error callback
onApiFeaturesError,
// a target document (or null if the current document applies)
null,
// a flag indicating that loading should be asynchronous
false
);
},
// once all features we loaded, we can instantiate the map
onApiFeaturesLoaded = function() {
/////////////////////////////////////////////////////////////////////////////////////
// Don't forget to set your API credentials
//
// Replace with your appId and token which you can obtain when you
// register on http://api.developer.nokia.com/
//
nokia.Settings.set("appId", "YOUR APP ID");
nokia.Settings.set("authenticationToken", "YOUR TOKEN");
//
/////////////////////////////////////////////////////////////////////////////////////
var mapContainer = document.getElementById("mapContainer");
var map = new nokia.maps.map.Display(mapContainer, {
center: [40.7127, -74.0059],
zoomLevel: 13,
components: [new nokia.maps.map.component.ZoomBar(),
new nokia.maps.map.component.Behavior(),
]
});
},
// if an error occurs during the feature loading
onApiFeaturesError = function(error) {
alert("Whoops! " + error);
};
oScript.type = "text/javascript";
// NOTE: tell jsl.js not to load anything by itself by setting "blank=true"
oScript.src = "http://api.maps.nokia.com/2.2.4/jsl.js?blank=true";
// assign the onload handler
oScript.onload = onScriptLoad;
//finally append the script
document.getElementsByTagName("head")[0].appendChild(oScript);Run Code Online (Sandbox Code Playgroud)
body {
margin: 0;
padding: 0;
}
#mapContainer {
width: 100%;
height: 100%;
position: absolute;
overflow: hidden;
top: 0;
left: 0;
}Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Asynchronous Loading</title>
</head>
<body>
<div id="mapContainer"></div>
</body>
</html>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2124 次 |
| 最近记录: |