Ionic4 Cordova 强制外链在InAppBrowser打开的实现方法
Ionic 4 结合 Cordova 全量外部链接拦截接入 InAppBrowser 实现
核心适用场景
- 应用内外部链接全部为接口动态生成,无固定硬编码URL,无法逐段配置跳转逻辑
- 需要完全阻断所有外链跳转系统浏览器的行为,统一由应用内置的InAppBrowser承接打开
落地步骤
- 安装匹配版本的依赖
- 安装Cordova InAppBrowser原生插件:
ionic cordova plugin add cordova-plugin-inappbrowser - 安装适配Ionic 4版本的Native封装包:
npm install @ionic-native/in-app-browser@^5.0.0 - 在
app.module.ts的Providers列表中注入InAppBrowser服务,保证全局可调用
- 安装Cordova InAppBrowser原生插件:
- 实现全局点击拦截逻辑
- 在
app.component.ts的Platform.ready()生命周期回调中,注册全局文档级别的点击事件委托,不需要在单个组件中逐次处理动态链接 - 拦截判断规则:
- 匹配点击事件关联的最近
<a>标签元素,不存在则直接放行 - 跳过空链接、页内锚点链接(以
#开头)、应用内部路由链接(以/开头、匹配当前应用源路径) - 命中外部http/https链接时,执行
e.preventDefault()阻断原生WebView的默认跳转,避免触发系统浏览器 - 调用InAppBrowser的
create()方法打开目标URL,统一设置打开模式为应用内置视图
- 匹配点击事件关联的最近
- 同步重写全局
window.open方法,拦截第三方组件、SDK直接调用window.open触发的外链跳转,将其重定向到InAppBrowser承接
- 在
- 原生层兜底配置
- 修改
config.xml中的WebView导航白名单规则,仅放行应用内部可访问的路径,从原生层阻断未被页面监听捕获的外链跳转 - 针对Android 9+、iOS 12+的系统安全策略补充对应配置,避免InAppBrowser打开明文http链接时出现白屏、加载失败问题
- 修改
常见注意事项
- 动态渲染的富文本内容,需要在插入DOM前批量替换所有
<a>标签的target="_system"属性,避免直接触发系统跳转 - 不要将InAppBrowser的打开目标设置为
_system,该参数会直接调用系统浏览器加载链接,违背拦截需求 - 针对应用内弹出的富文本弹窗、WebView内嵌页的链接,需要单独适配事件捕获逻辑,避免事件冒泡被上层组件拦截导致点击监听失效
内容的提问来源于stack exchange,提问作者Vishwas
相关产品推荐
相关产品推荐

