【发布时间】:2011-09-04 03:34:24
【问题描述】:
我正在尝试创建一个可以下载 mp3 文件的 google-chrome-extension。我正在尝试使用 HTML5 blob 和 iframe 来触发下载,但它似乎不起作用。这是我的代码:
var finalURL = "server1.example.com/u25561664/audio/120774.mp3";
var xhr = new XMLHttpRequest();
xhr.open("GET", finalURL, true);
xhr.setRequestHeader('Content-Type', 'application/octet-stream');
xhr.onreadystatechange = function()
{
if(xhr.readyState == 4 && xhr.status == 200)
{
var bb = new (window.BlobBuilder || window.WebKitBlobBuilder)();
bb.append(xhr.responseText);
var blob = bb.getBlob("application/octet-stream");
var saveas = document.createElement("iframe");
saveas.style.display = "none";
saveas.src = window.webkitURL.createObjectURL(blob);
document.body.appendChild(saveas);
delete xhr;
delete blob;
delete bb;
}
}
xhr.send();
在控制台中查看时,blob 已正确创建,设置看起来正确:
尺寸:15312172 类型:“应用程序/八位字节流”
但是,当我尝试由createObjectURL() 创建的链接时,
blob:chrome-extension://dkhkkcnjlmfnnmaobedahgcljonancbe/b6c2e829-c811-4239-bd06-8506a67cab04
我得到一个空白文档和一个警告说
资源解释为文档但 以 MIME 类型传输 应用程序/八位字节流。
如何让我的代码正确下载文件?
【问题讨论】:
-
我面临着类似的情况。我正在使用铬。对我来说,xhr.status 返回 0。这是否意味着 XMLHttpRequest 不支持跨域脚本?有其他选择吗?
-
XMLHttpRequests 必须遵循跨域策略。如果您想从另一个域调用页面,则需要在扩展的清单文件中添加该域。
标签: javascript html google-chrome-extension blob