URL.createObjectURL(blob)未在IE 11中创建正确的URL

时间:2017-07-17 11:11:12

标签: javascript

我试图在iframe中渲染pdf。它在Mozilla(v54)和Chrome(v59)上工作正常,但是当我点击加载PDF的链接时,IE(v11)中没有任何反应。经过多次调试后,我发现Chrome / Firefox中的网址为blob:http://localhost:37444/5a8e7fed-cd61-4c58-904c-fad2ae169718,而IE(v11)中的网址为blob:B7395CB5-169D-471F-BB8F-AA90EAFB6DDB。为什么URL.createObjectURL(blob)没有在IE(v11)中附加http请求

function (iframe, url, headers) {            

        var xhr = new XMLHttpRequest();

        xhr.open('GET', url);
        xhr.onreadystatechange = handler;
        xhr.responseType = "arraybuffer";

        headers.forEach(function (header) {
            xhr.setRequestHeader(header[0], header[1]);
        });
        xhr.send();

        function handler() {
            if (this.readyState === this.DONE) {

                if (this.status === 200) {
                    var blob = new Blob([xhr.response], { type: "application/pdf" });
                    var objectUrl = URL.createObjectURL(blob);                       

                    iframe.src = objectUrl;
                } else {
                    console.error('XHR failed', this);
                }
            }
        }

1 个答案:

答案 0 :(得分:0)

IE不会为这些blob对象创建一个url,因为出于安全原因我认为。所以使用var objectUrl = URL.createObjectURL(blob);不会提供你可以在iframe或embed标签中使用的源url。 我遇到了同样的问题并搜索了很多关于修复的问题。但是无法得到答案。相反,我解决了以下问题。 你可以使用以下IE浏览器

if (bowser.msie && window.navigator.msSaveOrOpenBlob) {
    navigator.msSaveOrOpenBlob(file, fileName);
}else{
    //do what you were doing for other than IE
}

上述IE代码将提示用户是否要保存文件或直接打开文件。 用户可以点击按钮'打开'然后IE将显示PDF而不在默认阅读器中下载。