You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jack Henry Banno移动应用中检测用户是否处于内嵌WebView

区分iOS SFSafariViewController内嵌WebView与Safari浏览器的方案

核心思路

优先借助Banno官方Plugin Bridge的能力做环境判断,若官方无相关API,再通过iOS浏览器的特征做兜底检测,最终根据环境差异处理OK按钮的逻辑。

一、优先使用Banno Plugin Bridge的官方检测

Banno的Plugin Bridge通常会提供环境标识,用来判断当前页面是否运行在原生App内嵌的WebView中。你可以检查是否存在类似以下的API:

// 示例:假设Banno提供了环境检测方法
const isEmbedded = window.Banno?.PluginBridge?.isEmbedded();

如果该方法返回true,说明当前处于原生App内嵌的SFSafariViewController中。

二、兜底:iOS环境特征检测

如果Banno未提供相关API,可以通过以下特征组合判断是否处于SFSafariViewController:

function isInSFSafariViewController() {
  const userAgent = navigator.userAgent;
  // 第一步:判断是否是iOS设备
  const isIOS = /iPhone|iPad|iPod/.test(userAgent);
  if (!isIOS) return false;
  
  // 第二步:判断是否是Safari内核(排除Chrome、Firefox等iOS浏览器)
  const isSafari = /Safari/.test(userAgent) && !/Chrome|CriOS|FxiOS/.test(userAgent);
  if (!isSafari) return false;
  
  // 第三步:排除Safari的独立Web App模式,SFSafariViewController中standalone为false
  const isStandalone = window.navigator.standalone;
  if (isStandalone) return false;
  
  // 第四步:验证window.close()是否可用(SFSafariViewController支持关闭,普通Safari仅能关闭脚本打开的窗口)
  return typeof window.close === 'function';
}

三、OK按钮逻辑处理

根据检测结果,分别处理网页端和内嵌WebView的行为:

document.querySelector('#ok-button').addEventListener('click', () => {
  if (isInSFSafariViewController()) {
    // 内嵌环境:尝试关闭SFSafariViewController
    const closeSuccess = window.close();
    // 若close()不生效,提示用户手动关闭
    if (!closeSuccess) {
      alert('流程已完成,请点击右上角关闭按钮返回银行仪表盘');
    }
  } else {
    // 网页端:跳转到银行仪表盘
    window.location.href = '/your-dashboard-url';
  }
});

注意事项

  1. 优先依赖Banno官方API,避免因iOS版本更新、Banno内嵌WebView调整导致特征检测失效;
  2. 测试时需覆盖iOS不同版本的SFSafariViewController,确认window.close()的行为是否符合预期;
  3. 若window.close()无法关闭内嵌窗口,可尝试查看Banno Plugin Bridge是否提供了触发原生关闭的方法(比如Banno.PluginBridge.closeModal()之类的接口)。

内容的提问来源于stack exchange,提问作者Dane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 21:15:05