我在一个网站上工作,它提供pdf文件(动态生成)供用户查看和下载。用户需要保存这些文件,签名(使用任何第三方pdf应用程序),然后上传。
对于这个特殊的问题,我们关注的是将pdf从ios上的chrome交付给第三方pdf应用程序。
在不安全的公共网站上,从公共链接(如
this IRS form
工作正常。你可以看,然后
按右下角的“打开…”
然后选择另一个应用程序。另一个应用程序将收到pdf的url并将其打开。
然而,在一个安全的网站上,移交并不正确。在按下pdf右下角的“open in…”并选择第三方pdf应用程序后,另一个应用程序将收到url,但不会收到维护会话状态所需的cookies。因此,当它下载pdf文件时,它会得到网站的登录页面。不同的应用程序处理这个不同,但例如,google drive会将登录页面保存为一个损坏的pdf文件。
请注意,这在Safari中运行良好,问题在于iOS Chrome。
我试图做的是让iOS上的Chrome浏览器将PDF作为blob加载,然后创建一个数据URL并使用它显示PDF:
<a id="myLink">Click here to test PDF data url</a>
<script>
$('#myLink').click(function() {
var xhr = new XMLHttpRequest();
xhr.open('GET', '/f1099msc.pdf');
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) {
if (this.status == 200) {
var blob = new Blob([this.response], { type: 'application/pdf' });
var reader = new FileReader();
reader.onloadend = function() {
window.open(reader.result);
};
reader.readAsDataURL(blob);
}
};
xhr.send();
return false;
});
</script>
这种方法工作良好,并成功地显示了pdf。然而,
按右下角的“打开…”将PDF分发给其他应用程序不起作用
. 按它是没有反应的。我认为这是因为数据url的大小太大,不支持将其传递给其他应用程序。
有什么想法吗?如何使用iOS Chrome在iOS上的“打开”功能,在安全网站后面使用PDF,或使用大数据URL?
Here is an example page that will load a PDF as a data url.
它只能在chrome ios上显示pdf文件。其他浏览器不喜欢这种方法。