【问题标题】:iPhone Safari does not redirect to new page with similar URLiPhone Safari 不会重定向到具有相似 URL 的新页面
【发布时间】:2022-08-08 22:23:26
【问题描述】:

我正在尝试将用户从我们的 Flutter 应用程序重定向到 safari 以进行付款。我们有两个在 safari 中打开的按钮。当用户点击它时,它会在 safari 中打开,用户付款并被重定向回应用程序。但是,如果 URL1 已经打开并且用户返回应用程序并尝试打开 URL2 ,则它不会在选项卡中打开 URL2 并且只会使用旧 URL (URL1) 刷新选项卡。您可以通过 safari 上的以下链接进行测试。

网址1:https://staging-admin.spotlight.xyz/#/payment/intent/user/7906ab92-31ea-46a4-90f8-d645bedafb46?time=1657808668

URL2:https://staging-admin.spotlight.xyz/#/payment/intent/user/7906ab92-31ea-46a4-90f8-d645bedafb46/org/4c3fbedd-9882-4aeb-8225-6e72c91fadbd?time=1657808709

这是我尝试过的:

  • 在 URL 中添加 / 而不是 ?
  • 添加时间戳(如上例)

如果有帮助,该 URL 是从 nodejs 应用程序提供的。

编辑:用于打开 URL 的代码是:

Future<void> _launchURL(String paymentUrl) async {
    if (await canLaunch(paymentUrl)) {
      await launch(
        paymentUrl,
        forceSafariVC: false,
        enableJavaScript: true,
      );
    } else {
      throw \'Could not launch $paymentUrl\';
    }
  }

EDIT2:我将 url_launcher 包更新到最新版本并使用 launchUrl 函数启动。它似乎仍然没有解决问题:(

该 URL 正在 Safari 中打开。

Future<void> _launchURL(String paymentUrl) async {
    if (await canLaunchUrl(Uri.parse(paymentUrl))) {
      await launchUrl(
        Uri.parse(paymentUrl),
        webOnlyWindowName: \'_blank\',
      );
    } else {
      throw \'Could not launch $paymentUrl\';
    }
  }

感谢您的回答!

  • 你如何打开网址?分享代码。

标签: javascript node.js flutter mobile-safari


【解决方案1】:

这两个 URL 对于浏览器来说并没有太大的不同,只是哈希值发生了变化。因此,请求/缓存的 URL 将始终为 https://staging-admin.spotlight.xyz/

您可以通过监听hashchange 事件来检测浏览器中的变化。

要使浏览器缓存无效/强制另一个请求,您应该将查询字符串移动到正确的位置,在哈希之前:

https://staging-admin.spotlight.xyz/?time=1657808668#/payment/intent/user/7906ab92-31ea-46a4-90f8-d645bedafb46

【讨论】:

  • 不错的皮卡,似乎最有可能是根本原因。
【解决方案2】:

我已经使用了这个插件并且它正在工作 https://pub.dev/packages/url_launcher

截图的

https://prnt.sc/LIjWsToQXsj0

https://prnt.sc/IDIfo_yfQ7Al

【讨论】:

    【解决方案3】:

    这里不清楚 URL 是在应用内 WebView 中打开还是在 Safari 中打开。

    鉴于当用户已经打开 URL1 时会出现问题,我假设是后者。在应用内 WebView 中打开 URL 可能会解决此问题,因为在继续之前需要关闭应用内浏览器。

    好像您正在使用url_launcher 包的launch 函数,它一直是deprecated。您可以尝试使用较新的launchUrl 函数吗?

    此函数支持mode 参数来指定LaunchMode,对于iOS 和Android,默认为inAppWebView。这可以更改为 externalApplication 以继续在设备的默认浏览器 (Safari) 中打开。

    【讨论】:

      猜你喜欢
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 2016-08-28
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      • 2016-05-27
      • 2012-05-10
      相关资源
      最近更新 更多