关于ArcGIS API for Javascript 的部署,网上有很多资料,官方也有。很简单
第1步、下载ArcGIS APIfor Javascript,好像现在官网的下载不了。网上很多资源,可以去下载。
这里我下载的是3.17
说明:最好下载稍新一点的,以适应当前新的浏览器。(例3.5对ie11不兼容,鼠标滚轮放大缩小失控。)
第2步、以IIS为例,将下载下来的api放到想要的路径中。注意下载下来的api可以路径很深,可以只取api有用的文件夹。
IIS路径:
第3步:打开3.17下的install_win.html页面(以windows为例)。查看js文件路径配置说明。
官方的说明中都说的很清楚了,就是修改4个js文件中的路径。
问题:依官方的说法,我们只是给api固定1个访问路径。如果访问路径有变化,域名更替什么的。你只能乖乖再改一次路径。或者需要同时兼容内外网不同路径访问时。这现起来比较困难,可能需要部署两个api。再是api部署服务器迁移时,每次都要去改这4个路径。很麻烦。
(最新有个项目,一会部署到这个服务器、一会部署到另一个服务器;客户服务器为政务网,而具需要内外网两种模式兼容,内外网完全隔离的;按原方法部署可能要部署两个)
解决:这里有个方法可以实现一次性解决所有以上问题。
首先我们在这4个js文件的前面都加上以下代码:
(代码摘自: https://github.com/fsjohnhuang/getCurrAbsPath/blob/master/lib/getCurrAbsPath.js )
(function(exports) {
var doc = exports.document,
a = {},
expose = +new Date(),
rExtractUri = /((?:http|https|file):\/\/.*?\/[^:]+)(?::\d+)?:\d+/,
isLtIE8 = ('' + doc.querySelector).indexOf('[native code]') === -1;
exports.getCurrAbsPath = function() {
// FF,Chrome
if (doc.currentScript) {
returndoc.currentScript.src;
}
var stack;
try {
a.b();
}
catch (e) {
stack =e.fileName || e.sourceURL || e.stack || e.stacktrace;
}
// IE10
if (stack) {
var absPath= rExtractUri.exec(stack)[1];
if (absPath){
return absPath;
}
}
// IE5-9
for (var scripts = doc.scripts,
i = scripts.length - 1,
script; script = scripts[i--]; ) {
if(script.className !== expose && script.readyState === 'interactive') {
script.className = expose;
// if less than ie 8, must get abs path by getAttribute(src, 4)
return isLtIE8 ? script.getAttribute('src', 4) : script.src;
}
}
}();
} (window));
例:
然后我们把官方的baseUrl改进一下:
原:baseUrl:(location.protocol ==='file:' ? 'http:' : location.protocol) + '//' +"localhost/3.17/3.17/dojo"
改:baseUrl:getCurrAbsPath.replace("/"+getCurrAbsPath.split("/").pop(),"") + "/dojo"
大功造成。
注:getCurrAbsPath为得到当前js的引用路径。
getCurrAbsPath.replace("/"+getCurrAbsPath.split("/").pop(),"")后面要按的路径需要根据当前js文件路径修改。
SDK:SDK可以直接放api要目录下方便查看。
下载的SDK:
IIS:
附:ArcGIS_JS_Api3.17免配置包(含SDK):
链接:http://pan.baidu.com/s/1slbdEmL
密码:6fm5