iOS PWA 独立:如何强制在新窗口中打开

Posted

技术标签:

【中文标题】iOS PWA 独立:如何强制在新窗口中打开【英文标题】:iOS PWA standalone: how to force opening in a new window 【发布时间】:2019-12-14 18:06:59 【问题描述】:

我在主屏幕上保存了一个 PWA,它打开时通常没有搜索栏或底部按钮(共享、标签等)。

所以每个链接都会在 PWA 中打开,这是意料之中的。

我在显示 pdf 时遇到问题,因为它们通常在 Safari 中使用“共享”按钮和所有底部栏打开,但在 PWA 中它们打开时没有底部栏且没有任何共享按钮。

所以我的想法是在新的 Safari 窗口中打开 PDF 链接 (http://www.mywebsite.com/download/pdf/12345)。

我尝试将target="_blank" 放在 PDF 链接上,但这并没有解决问题。

我还尝试通过使用safari://http://www.mywebsite.com/download/pdf/12345 在 Safari 中打开应用程序来强制 ios 行为,但没有成功。

如何打开指向链接的新 Safari 窗口?

【问题讨论】:

【参考方案1】:

好的,唯一可行的解​​决方案是告诉 iOS 你要进入另一个域。

仅当您位于同一个域中时,PWA 才会保留在您的应用框架中。 要在外部窗口(或在 PWA 内部但使用 Safari 标准控件)中打开域内的链接,您必须将其发送到外部/不同域。

所以 PWA 在 https://www.mywebsite.com/ 上,并且您想打开带有所有 Safari 控制按钮的 PDF,您只需创建一个 SUB 域并将链接指向它,就像 https://media.mywebsite.com/download/pdf/12345 在这一点上 PWA 认为您在不同的域并进行正确的渲染! ?

【讨论】:

在您回答是的时候,现在无法再打开外部链接 @FabioRicci 如果你按照我写的那样使用外部子域,它仍然可以工作,因为它们被视为不同的域 但这仅适用于文件吗?我尝试在另一个域上打开一个外部链接,这是一个音频流,但仍然打开这个该死的应用内浏览器。音频仍然可以播放,但不支持背景音频bugs.webkit.org/show_bug.cgi?id=198277 我正处于地狱循环的中间...... 好的,应用程序将在 PWA 中打开一个内部浏览器,它不会打开一个新的 Safari 窗口,但它会包含所有 Safari 工具栏。如果有疑问,我们可以通过电报继续(用户:@mrweb87)【参考方案2】:

你可以尝试使用window.open(url)。

但是,请记住将其放在具有 onclick 事件属性的元素中。

例如,

<button class='btn' onclick='window.open("https://www.google.com", "_blank");'>Open Google search</button>

参考:window.open(url, '_blank'); not working on iMac/Safari

编辑

您可以在 manifest.json 中设置scope 来自定义打开外部链接的位置。

您可以在属性范围上参考https://developers.google.com/web/fundamentals/web-app-manifest。

【讨论】:

不幸的是,这不起作用。我使用了与您提供的完全相同的代码(复制粘贴)...我认为目前还没有办法。 @Mr.Web 现在我明白你需要什么了。我找到了一种定制方法。你可以看到我的编辑答案。 我的应用程序位于www.mysite.com/live/index.html 中,我尝试将“范围”设置为live//live/,但它的作用完全相同,但不起作用。在 android 上运行良好

以上是关于iOS PWA 独立:如何强制在新窗口中打开的主要内容,如果未能解决你的问题,请参考以下文章

如何在新选项卡或窗口中打开 PDF 文件而不是下载它(使用 asp.net)?

使用 Thymeleaf 创建在新窗口/选项卡中打开的链接

在本机 iOS 中未加载在新窗口或选项卡中打开的链接

location.href 如何在在新窗口中打开页面!

如何使用HTML实现点击一个链接打开新窗口49

response.Redirect如何在新窗口打开