我如何在 iOS 上使用 iOS Chrome 的 "Open in" 功能,将 PDF 隐藏在安全网站或大数据 URL 中?
How can I use iOS Chrome's "Open in" feature on iOS with PDF behind secured website or with a large data URL?
我在一个网站上工作,该网站提供 PDF 文件(即时生成)供用户查看和下载。用户需要保存这些,签署它们(使用任何第 3 方 PDF 应用程序),然后上传它们。 对于这个特定问题,我们专注于将 PDF 从 iOS 上的 Chrome 移交给第 3 方 PDF 应用程序。
在不安全的 public 网站上,从 public link(例如 this IRS form)查看 PDF 工作正常。您可以查看它,然后按右下角的"Open in..."并选择另一个应用程序。另一个应用程序将收到 PDF 的 URL 并正常打开它。
但是,在安全网站上,切换不会正确发生。按 PDF 右下角的 "Open in..." 并选择第 3 方 PDF 应用程序后,其他应用程序将收到 URL 但不会收到维持会话状态所需的 cookie。因此,当它下载 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。但是,按右下角的 "Open in..." 将 PDF 移交给另一个应用程序不起作用。按下它没有反应。我认为这是因为数据量很大 url,并且不支持移交给另一个应用程序。
有什么想法吗?我如何在 iOS 上使用 iOS Chrome 的 "Open in" 功能与受保护网站后面的 PDF 或大数据 URL?
Here is an example page that will load a PDF as a data url. 仅在 Chrome iOS 上显示 PDF 有效。其他浏览器不喜欢这种方法。
问题的根源似乎是 Chrome 中为 iOS 实施的行为。在 https://bugs.chromium.org/p/chromium/issues/detail?id=831678 上提交了一个解决丢失 cookie 的问题。
作为一种替代方法,可以生成一个临时 URL,其中包含所有必要的身份验证详细信息,并且不依赖于随请求一起发送的 cookie。
使用这些临时 URL 打开 Chrome 中的 PDF。按下 "Open in..." 按钮会将临时 URL 传递给第三方应用程序。出于安全原因,您应该根据时间或通话次数停用临时 URL。还可以实施限制,即临时 URL 仅对那个确切的 IP 地址有效。
我们需要有人调查此问题,因为它仍未修复。不过我可能找到了解决方法,但它不适用于所有文件类型。对于 PDF,可以通过执行以下操作 iOS Chrome 修复错误“此时无法下载文件”:
- 在iOSChrome中输入地址:chrome://flags/
- 找到“在 Files.app 中打开下载”的标志并启用它
- 从现在开始,当您点击安全站点中的文档进行交互(打开方式...)时,共享 sheet 将弹出下载 PDF 文件的选项,而不是 HTML 文件和以前一样。
仍然困扰我的是这不适用于 .xls 或 .doc 文件或其他文档文件(因为它们不显示“打开方式...”对话框?)。
我的问题是如何解决这个问题,因为我到处都在寻找!!
我在一个网站上工作,该网站提供 PDF 文件(即时生成)供用户查看和下载。用户需要保存这些,签署它们(使用任何第 3 方 PDF 应用程序),然后上传它们。 对于这个特定问题,我们专注于将 PDF 从 iOS 上的 Chrome 移交给第 3 方 PDF 应用程序。
在不安全的 public 网站上,从 public link(例如 this IRS form)查看 PDF 工作正常。您可以查看它,然后按右下角的"Open in..."并选择另一个应用程序。另一个应用程序将收到 PDF 的 URL 并正常打开它。
但是,在安全网站上,切换不会正确发生。按 PDF 右下角的 "Open in..." 并选择第 3 方 PDF 应用程序后,其他应用程序将收到 URL 但不会收到维持会话状态所需的 cookie。因此,当它下载 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。但是,按右下角的 "Open in..." 将 PDF 移交给另一个应用程序不起作用。按下它没有反应。我认为这是因为数据量很大 url,并且不支持移交给另一个应用程序。
有什么想法吗?我如何在 iOS 上使用 iOS Chrome 的 "Open in" 功能与受保护网站后面的 PDF 或大数据 URL?
Here is an example page that will load a PDF as a data url. 仅在 Chrome iOS 上显示 PDF 有效。其他浏览器不喜欢这种方法。
问题的根源似乎是 Chrome 中为 iOS 实施的行为。在 https://bugs.chromium.org/p/chromium/issues/detail?id=831678 上提交了一个解决丢失 cookie 的问题。
作为一种替代方法,可以生成一个临时 URL,其中包含所有必要的身份验证详细信息,并且不依赖于随请求一起发送的 cookie。
使用这些临时 URL 打开 Chrome 中的 PDF。按下 "Open in..." 按钮会将临时 URL 传递给第三方应用程序。出于安全原因,您应该根据时间或通话次数停用临时 URL。还可以实施限制,即临时 URL 仅对那个确切的 IP 地址有效。
我们需要有人调查此问题,因为它仍未修复。不过我可能找到了解决方法,但它不适用于所有文件类型。对于 PDF,可以通过执行以下操作 iOS Chrome 修复错误“此时无法下载文件”:
- 在iOSChrome中输入地址:chrome://flags/
- 找到“在 Files.app 中打开下载”的标志并启用它
- 从现在开始,当您点击安全站点中的文档进行交互(打开方式...)时,共享 sheet 将弹出下载 PDF 文件的选项,而不是 HTML 文件和以前一样。 仍然困扰我的是这不适用于 .xls 或 .doc 文件或其他文档文件(因为它们不显示“打开方式...”对话框?)。 我的问题是如何解决这个问题,因为我到处都在寻找!!