事实证明,我最初的悲观主义(关于这是不可能的)可能被误导了。这是一个使用一些 HTML5 File API 的演示(不像我一直在阅读的一些东西那么先进,但似乎安全限制使得目前完全自动化这有点遥不可及,这个演示适用于 Firefox 和 Chrome,但我猜只有 IE10 才有机会支持它。
var createObjectURL = function (file) {
if (window.webkitURL) {
return window.webkitURL.createObjectURL(file);
} else if (window.URL && window.URL.createObjectURL) {
return window.URL.createObjectURL(file);
} else {
return null;
}
},
xhr = new XMLHttpRequest();
xhr.open('GET', 'http://upload.wikimedia.org/wikipedia/commons/6/63/Wikipedia-logo.png', true);
xhr.responseType = 'blob';
xhr.onload = function (e) {
if (this.status == 200) {
var url = createObjectURL(new Blob([this.response], {
type: 'image/png'
}));
var link = document.createElement('A');
link.setAttribute('href', url);
link.setAttribute('Download', 'Name I Want it to have.png');
link.appendChild(document.createTextNode('Download'));
document.getElementsByTagName('body')[0].appendChild(link);
}
};
xhr.send();
在这里,我XMLHttpRequest
用来请求 PNG,然后将其存储在 a 中Blob
并创建一个下载 URL,其中包含一些触发浏览器下载资产而不是仅仅链接到它的额外信息(这就是它对 PNG 所做的事情)。我找不到不需要会话密钥的 Grooveshark URL,所以我不知道这是否对您有用,但该限制来自 Groovshark 防止热链接到歌曲的努力。