JavaScript 触发的重定向在 facebook webview 中打开的网站上不起作用

问题描述 投票:0回答:1

从 Android 上的 Facebook 应用程序中打开我们的电子商务网站,会在 Facebook 网络视图中打开页面本身。执行购买时,会打开外部应用程序进行数字识别,然后用户必须返回 Facebook 网络视图。返回 Facebook 后 - 用户应该被重定向到感谢页面。

这在 iOS 中运行良好。但是 - 在某些 Android 手机中这不起作用。假设 Facebook Web 视图会阻止以编程方式启动的重定向,因为将 URL 放入用户点击的链接中效果很好。

该问题在使用 Android 12 和 Facebook 应用的 Pixel 中重现,但该重定向在同一部手机上的其他一些网页视图应用中有效,这使得 Facebook 应用成为可疑。

经过测试的不同重定向方法有或没有延迟

//1
document.location = url;

//2
window.location.replace(url);

//3
window.location.href = url;

//4
window.top.location.replace(url);

//5
window.location.replace(url);
window.location.reload();

//6
window.top.location.href = url;
window.open(url);

//7
if (!!(window.history && history.replaceState)) {
    window.history.replaceState(
        {},
        "a title",
        url
    );
}

//8
document.location = url;
document.location.reload()

它们似乎都不起作用。关于如何解决这个问题还有其他建议吗?非常感谢!

javascript android facebook http-redirect webview
1个回答
0
投票

我们也遇到了这个问题(我假设您正在谈论 BankID 身份验证)。这似乎是 Android 上的一项安全功能,在不同的 webview 组件中以不同的方式体现出来。

  • Facebook Webview - 只是阻止导航
  • CustomTabs 组件 - 显示一个弹出窗口,要求打开应用程序(仅当重定向使用深层链接时,例如 myapp://callback)

两者都与 https://issues.chromium.org/issues/41328386有关。

我们最终得到的解决方案是显示一个带有按钮的额外屏幕来捕获用户交互。之后重定向工作正常。

流程如下所示:

  1. 用户在 FB 浏览器中启动 OAuth2/OIDC 流程
  2. 用户被导航到外部应用程序以完成验证(例如银行ID)
  3. 用户导航回 FB 浏览器(深层链接或手动)
  4. 登录网页轮询状态并从外部应用程序接收成功
  5. 将显示“成功”屏幕,并带有继续按钮
  6. 用户按下按钮并被重定向到下一页
© www.soinside.com 2019 - 2024. All rights reserved.