目的:从地图网站上获取瓦片文件,但直接访问图片地址显示被禁止。需要绕开这个禁止。
方法:通过在页面脚本中进行注入,在加载资源的时候,直接将资源下载到本地下载文件夹中
关键:
1、注入方法,将原事件函数指向新变量,用自己的函数替代,并执行原函数以保证程序正常运行;
2、新变量仍在原对象中,保证闭包的局部变量可访问;
3、页面内部请求二进制数据;
4、直接创建链接并下载到下载目录
问题:
1、重复下载;2、自动遍历还没做
//保留旧有过程 map._layers[27]._tileOnLoadold = map._layers[27]._tileOnLoad //用新方法替换原过程 map._layers[27]._tileOnLoad = function (t, i) { //执行原来的过程 map._layers[27]._tileOnLoadold(t, i); //下载并处理资源,根据资源内容,下载资源到本地文件夹,并重命名 window.fetch(i.src).then(a => a.blob()).then(a => { let url = window.URL.createObjectURL(a); let link = document.createElement('a'); link.href = url; //根据地址过滤出瓦片编号,作为作为存储文件名 let nums = i.src.match(/x=(\d+)&y=(\d+)&z=(\d+)/); if(nums!=null){ link.download = nums.slice(1, 4).join('_') + ".jpg"; link.target = "_blank"; link.click(); window.URL.revokeObjectURL(link.href) }else{ console.log(i.src); } }) }
标签:layers,map,27,获取,link,._,机制,下载,注入 From: https://www.cnblogs.com/qinshoublog/p/17378273.html