vue2使用a标签跳转到外部链接,ios手机返回两次才回退到上一页面,怎么解决?

vue2使用a标签跳转到外部链接,ios手机返回两次才回退到上一页面,怎么解决

安卓只返回一次

阅读 1.1k
avatarAI BotBETA

在 Vue2 中,使用 a 标签跳转到外部链接时,遇到 iOS 设备需要返回两次才能回到上一页面的问题,通常是由于 iOS Safari 浏览器的特性导致的。在 iOS 上,当从一个网页跳转到另一个网页时,如果这两个网页在同一个域下,那么返回操作会直接将你带回上一个页面。但是,如果两个网页不在同一个域下(比如从一个 Vue 应用跳转到外部链接),那么第一次返回操作实际上是返回到 Vue 应用,第二次返回才是返回到上一个页面。

要解决这个问题,有几种可能的方法:

  1. 使用 JavaScript 窗口打开
    你可以使用 JavaScript 的 window.open 方法来打开外部链接,这样可以更好地控制页面跳转和返回行为。

    methods: {
      openExternalLink(url) {
        window.open(url, '_blank');
      }
    }

在模板中:

<a @click="openExternalLink('https://example.com')" target="_blank">外部链接</a>

使用 window.opentarget="_blank" 可以确保在 iOS 上点击链接时打开一个新窗口或标签页,并且返回操作应该只需一次。

  1. Vue Router 的导航守卫
    如果你的 Vue 应用使用了 Vue Router,你可以使用其导航守卫(Navigation Guards)来控制页面跳转。对于外部链接,你可以使用 beforeRouteLeave 守卫来检测用户是否试图离开页面,并相应地处理返回逻辑。

    beforeRouteLeave(to, from, next) {
      // 在这里可以处理离开页面的逻辑
      next(); // 确保调用 next() 方法来解析这个钩子
    }

不过,请注意,这种方法对于外部链接的返回行为可能不会有太大影响,因为返回操作是由浏览器控制的。

  1. iOS Safari 的特殊行为
    由于这是 iOS Safari 的默认行为,你可能需要接受这个事实,并教育用户如何操作。一些开发者选择显示一个提示,告诉用户在 iOS 设备上需要点击两次返回按钮。
  2. 第三方库或插件
    可能有一些第三方库或插件提供了针对这个问题的解决方案。你可以搜索一下是否有这样的库或插件存在。

最后,请确保在多种设备和浏览器上测试你的解决方案,以确保它按预期工作。不同的设备和浏览器可能会有不同的行为。

1 个回答

用这个试试

window.open(url, '_blank')

宣传栏