Javascript '的替代方案;下载';Safari/iOS中的属性

Javascript '的替代方案;下载';Safari/iOS中的属性,javascript,html,ios,download,safari,Javascript,Html,Ios,Download,Safari,我用base64创建了一个blob,我需要将此数据作为pdf下载 我创建了这个片段: var blob = new Blob([byte]); var link = document.createElement('a'); link.href = window.URL.createObjectURL(blob); link.target = '_blank'; var fileName = name + '.pdf'; link.download

我用base64创建了一个blob,我需要将此数据作为pdf下载

我创建了这个片段:

    var blob = new Blob([byte]);
    var link = document.createElement('a');

    link.href = window.URL.createObjectURL(blob);
    link.target = '_blank';
    var fileName = name + '.pdf';
    link.download = fileName;
    link.click();
除了iOS上的safari mobile之外,它适用于所有浏览器

该文件已实际下载,但其名称为“未知”,因此无法打开,因为扩展名丢失

问题是该浏览器和IE上缺少支持

IE有很多变通方法,但我没有找到safari/iOS的变通方法

您知道如何在此浏览器中下载从base64(不涉及XHR)获取的blob吗

谢谢

Safari中的“目标”属性似乎覆盖了“下载”属性。据我所知,目前还没有办法解决这个问题。因此,我认为您必须等待下一个Safari版本(13),它将在几个月后推出

我需要在safari iOS中以pdf(…)的形式下载此数据

简短回答:你不能。由于无法在safari iOS上下载该文件


另一种方法是使用适当的mime类型在浏览器上打开文件,这样它就可以显示其内容(如果需要,用户可以手动下载)

确保在创建Blob时传递mime类型



最后,我强烈建议您使用它来处理大多数角落案例/多浏览器支持,以便用javascript保存(或在本例中打开)文件。

请参见以下链接:-

Safari 13 Beta 3已经发布,因此您可以检查它是否正常工作

您可以使用atob函数下载从base64获取的blob

atob函数将base64编码的字符串解码为一个新字符串,该字符串的每个二进制数据字节都有一个字符

您可以通过FileSaver.js本地保存blob

您也可以在此处进行检查,这将很有帮助:-

我不确定您的问题是否是另一个建议所描述的问题:在过去,当仍然是一件事时,我通过在标题中添加不同的标题行来解决类似的问题。为此,您可能必须使用较低级别的JS库。此外,您还需要了解Safari真正解释了哪些标题,可能是内容处置方面的问题。这个问题还没有得到足够的重视,谢谢@GerardoFurtado的赏金。一周后,我自信地说,这款浏览器不存在任何特定的解决方案,而且最奇怪、最深奥的解决方案也不会提供任何令人满意的结果。关于我的具体案例,我向市场营销部门解释了问题,我们选择在新选项卡中查看该文件。换句话说,如果我们匹配safari/IOS浏览器,采用的解决方案如下:
window.open('data:application/pdf;base64',+escape(base64),'u blank')文件保存器不是一个选项。从文档中可以看出:
由于iOS中的限制,saveAs会在一个新窗口中打开,而不是下载
@GerardoFurtado,这正是我的观点:目前,由于一个bug,无法在safari iOS上下载该文件。一旦bug被修复,FileSaver.js可能能够相应地处理这个问题。目前,最好的办法是在一个新窗口(用户可以手动下载)中打开该文件。在这种情况下,您的答案(以及所有其他答案)应该只是一条注释。@GerardoFurtado我已再次更新了答案,以使其更清楚。不过,我不知道你为什么认为这应该是一个评论。根据我对的解释,这是一个很好的答案。@DiogoSgrillo您提到的bug在iOS 13中被标记为已修复已解决。这还不可能吗?这个答案显然是错误的。MobileSafari中没有锚元素的
download
属性,如果您尝试的话,它只是
未定义的
。因此,没有什么可以替代的。您在回答中提到的Safari是MacOS Safari,而不是iOS Safari。另外,FileSaver不允许在iOS中下载,就像他们的文档所说的那样。@GerardoFurtado你是说FileSaver.js吗?不,我是说Safari。在撰写本文时,iOS没有Safari 13。你又在谈论MacOS了。@GerardoFurtado请检查它的发布
var blob = new Blob([byte], {type: 'application/pdf'});