2

我使用 Blob 和 URL.createObjectURL() 来获取一些二进制 PDF 数据的“对象 URL”(blob:)。

在 FireFox 和 Chrome 中,如果我包含一个<A/>链接 HTML 元素,并以href编程方式将其设置为对象 URL,则该链接是可点击的并导致 PDF 显示。

在 IE10 中,我得到对象 URL OK。链接 HTML 元素显示 OK 并且有一个 blob: 目标。但是单击它不会导致显示 PDF。相反,我得到一个空白窗口,并且 IE 图标永远旋转。

然而,即使在 IE10 中,右键单击链接上的 save-target-as 也会保存包含正确数据的 PDF 文件。该文件可以在浏览器之外成功打开。

任何人都知道为什么 IE 不向我显示 PDF 文件?有什么建议我可以让它这样做吗?或者,任何说服它只提供保存链接的建议,而不是尝试打开它但未能打开它。

这是重现该问题的页面和脚本:-

<a href="" target="_blank" id="theLink">Click this link</a>
<script type="text/javascript">
    var TEST_PDF_DATA = "JVBERi0xLjYNJeLjz9MNMSAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMiAwIFIgPj4KZW5kb2JqCjIgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzIC9LaWRzIFsgNyAwIFIgXSAvUmVzb3VyY2VzIDQgMCBSIC9Db3VudCAxIC9NZWRpYUJveCAzIDAgUiA+PgplbmRvYmoKMyAwIG9iagpbIDAgMCA1OTUgODQyIF0KZW5kb2JqCjQgMCBvYmoKPDwgL0ZvbnQgNSAwIFIgPj4KZW5kb2JqCjUgMCBvYmoKPDwgL2RlZmF1bHQgNiAwIFIgPj4KZW5kb2JqCjYgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL0Jhc2VGb250IC9Db3VyaWVyLUJvbGQgL1N1YnR5cGUgL1R5cGUxID4+CmVuZG9iago3IDAgb2JqCjw8IC9QYXJlbnQgMiAwIFIgL1R5cGUgL1BhZ2UgL0NvbnRlbnRzIFsgOCAwIFIgXSAvUmVzb3VyY2VzIDQgMCBSIC9NZWRpYUJveCAzIDAgUiA+PgplbmRvYmoKOCAwIG9iago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSAvTGVuZ3RoIDY4ID4+DXN0cmVhbQ14nDNQSOd1CuHVT0lNSyzNKVEwNlIISeM1VDAAQkMQz9zcWM/CHCiay6vhkZqTk68Qnl+Uk6KoqRCSxesawgsADSoQLA1lbmRzdHJlYW0KZW5kb2JqCnhyZWYNMCA5DTAwMDAwMDAwMDAgNjU1MzUgZg0KMDAwMDAwMDAxNSAwMDAwMCBuDQowMDAwMDAwMDY0IDAwMDAwIG4NCjAwMDAwMDAxNTYgMDAwMDAgbg0KMDAwMDAwMDE4NyAwMDAwMCBuDQowMDAwMDAwMjIwIDAwMDAwIG4NCjAwMDAwMDAyNTYgMDAwMDAgbg0KMDAwMDAwMDMyOSAwMDAwMCBuDQowMDAwMDAwNDI5IDAwMDAwIG4NCnRyYWlsZXINPDwgL1NpemUgOSAvUm9vdCAxIDAgUiA+Pg1zdGFydHhyZWYNNTY4DSUlRU9G";
    var byteCharacters = atob(TEST_PDF_DATA);

    var charCodeFromCharacter = function(c) { return c.charCodeAt(0); }
    var byteArrays = [];
    for (var offset = 0; offset < byteCharacters.length; offset += 1000)
    {
        var slice = byteCharacters.slice(offset, offset + 1000);
        var byteNumbers = Array.prototype.map.call(slice, charCodeFromCharacter);
        byteArrays.push(new Uint8Array(byteNumbers));
    }

    var blob = new Blob(byteArrays, { type: "application/pdf" });
    var url = URL.createObjectURL(blob);

    document.getElementById("theLink").href = url;
    document.getElementById("theLink").innerHTML = url;
</script>
4

2 回答 2

0

看看下面的网址

https://superuser.com/questions/560647/ie10-unexpectedly-sends-a-head-request-for-pdf-what-has-changed

看起来 IE10 正在发送头部请求

于 2013-07-30T15:55:14.023 回答
0

您应该首先作为用户操作打开 url,然后填充 pdf

检查这个:

如何绕过 Angular 6 中的弹出窗口拦截器?

于 2019-07-26T12:41:16.730 回答