【问题标题】:iOS PWA standalone: how to force opening in a new windowiOS PWA 独立:如何强制在新窗口中打开
【发布时间】: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 窗口?

【问题讨论】:

    标签: ios safari mobile-safari progressive-web-apps


    【解决方案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 上运行良好
    猜你喜欢
    • 1970-01-01
    • 2013-10-09
    • 2011-02-24
    • 2011-07-07
    • 2020-08-19
    • 2010-11-01
    • 1970-01-01
    • 2011-05-12
    • 2011-04-16
    相关资源
    最近更新 更多