如何在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'; } });
注意事项
- 优先依赖Banno官方API,避免因iOS版本更新、Banno内嵌WebView调整导致特征检测失效;
- 测试时需覆盖iOS不同版本的SFSafariViewController,确认
window.close()的行为是否符合预期; - 若
window.close()无法关闭内嵌窗口,可尝试查看Banno Plugin Bridge是否提供了触发原生关闭的方法(比如Banno.PluginBridge.closeModal()之类的接口)。
内容的提问来源于stack exchange,提问作者Dane
相关产品推荐
相关产品推荐

