【问题标题】:iOS web app opens Safari in spite of avoiding HTML 'href' links尽管避免了 HTML 'href' 链接,iOS Web 应用仍会打开 Safari
【发布时间】:2023-03-12 11:35:01
【问题描述】:

我的 IOS(在 9.2 上测试)Web 应用程序(apple-mobile-web-app-capable)避免了<a href="xxx" /> 链接并仅使用 Javascript 导航功能(如 windows.location.replace(url))导航到页面。

我的应用程序的根不是 www.xxx.com 而是 www.xxx.com/mysite。到 /mysite/xxx 的一些导航操作正在运行,但是到 /mysite/yyy 的其他导航会打开 Safari 窗口。 除了<a href="xxx" /> 链接之外,是否还有其他情况会导致 Web 应用在单独的 Safari 窗口中打开链接?

我不使用target 属性。我所有的链接看起来像

<a ng-click="vm.replace('/mysite/xxx') class="navbar-brand">Contact</a>

...

replace(url:string) {
    this.$window.location.replace(url);
}

我还尝试了不同的变体(location.href = urllocation = url),结果都相同。也许问题与 IOS 9.2 相关,我确信我在一个月前创建的 Web 应用程序中使用了相同的构造。
目标页面的内容是否可能导致此行为?从 /mysite/Home 导航到 /mysite/Media 有效,导航到 /mysite/EPG 会打开 Safari 浏览器。
也许浏览器缓存中有问题?所以我清除了缓存,但结果相同。

【问题讨论】:

    标签: ios safari


    【解决方案1】:

    根据您的描述,听起来target="_blank" 正在被使用,这就是导致网页链接在新窗口中打开的原因。由于您的所有链接都使用 JavaScript,因此检查起来应该相对容易。

    【讨论】:

    • 我没有使用目标属性。我在我的问题中添加了更多信息。
    • 我刚刚阅读了您发布的更新,我同意这似乎令人费解——尤其是因为您之前说过它运行良好。我对replace() 的理解是它使后退按钮无法使用。我想知道 Safari 是否试图“修复”它认为不好的做法。 assign() 工作得更好吗?
    • 我尝试了任何变体('location = url、location.href = url、location.assign(url) 和 location.replace(url)')。他们都有相同的行为。我确信几个月前(在 iOS9 之前)我在另一个应用程序中使用了“replace()”并且没问题。现在疯狂的是它适用于 /mysite/Media 但不适用于 /mysite/EPG。我还尝试清理浏览器缓存。目标页面的内容是否有可能导致在 Safari 中打开?但是里面并没有什么特别的……
    • 我认为可以肯定地说我的回答 + 评论没有帮助,所以恐怕你需要等待其他人加入 - 抱歉!
    猜你喜欢
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2020-04-12
    相关资源
    最近更新 更多