jsonp 应该不行,报错信息也提示了,这是张图片,不是可执行脚本,可以换种方式:
window.onload = function() {
var aLink = document.createElement('a');
aLink.href = 'http://favicon.byi.pw/?url=https://www.baidu.com/';
aLink.download = 'img';
aLink.style.display = 'none';
document.body.appendChild(aLink);
aLink.click();
};
jsonp 为什么不行,这要涉及到 jsonp 的原理了,比如一个可以通过 jsonp 访问的 url
http://freegeoip.net/json/?callback=handleResponse
实际上这个 url 里的内容应该是这个样子:
handleResponse(data);
jsonp 技术,实际上代码是这样:
var script = document.createElement("script");
script.src = "http://freegeoip.net/json/?callback=handleResponse";
document.body.insertBefore(script, document.body.firstChild);
很明显,这个元素加载好了后,肯定直接执行脚本里的代码,实际上就是执行
handleResponse(data);
那么,如果你在本地脚本里定义了 handleResponse 函数
function handleResponse(data){
// do something about the data
}
那你两串代码连在一起不就是:
handleResponse(data);
function handleResponse(data){
// do something about the data
}
那这个跨域的数据不就直接在 handleResponse 里拿到了么,,,但你这里是图片,不是可执行脚本,当然会报错