Ionic InAppBrowser设置target="_blank"在iOS无法打开的问题
解决Ionic InAppBrowser在iOS平台target="_blank"无法打开的问题
这是iOS平台上InAppBrowser组件的常见行为差异问题,我来给你梳理下可行的解决思路和具体方案:
核心原因
Android和iOS对WebView新窗口(_blank)的处理机制不同:iOS的默认UIWebView对_blank目标的支持有限,而WKWebView才是更现代、对新窗口兼容性更好的选择;另外,插件配置或系统权限也可能导致这个问题。
具体解决方案
1. 启用WKWebView配置
在你的InAppBrowser选项中强制启用WKWebView,这是解决iOS新窗口问题的关键。修改你的配置代码如下:
// 调整options配置,添加usewkwebview=yes const options = { location: 'yes', toolbar: 'yes', usewkwebview: 'yes', // iOS下必须启用这个参数 allowInlineMediaPlayback: 'yes', hidden: 'no' }; let target = '_blank'; const browser = this.iab.create(this.url, target, options); browser.on("loadstart").subscribe(event => { console.log("loadstart -->", event); console.log(event.url); let browser_url = event.url; if (browser_url.indexOf("qwertyerror_message") > -1) { // 你的错误处理逻辑 let error_status = this.getParameterByName('qwertyerror...'); // 后续处理代码 } });
2. 确保InAppBrowser插件为最新版本
旧版本的插件可能存在iOS兼容性问题,执行以下命令更新或重新安装插件:
# 先移除旧插件 ionic cordova plugin remove cordova-plugin-inappbrowser # 重新安装最新版本 ionic cordova plugin add cordova-plugin-inappbrowser
3. 检查iOS Info.plist网络权限
如果你的目标URL是HTTP协议(非HTTPS),iOS默认会阻止这类请求,需要在Info.plist中添加网络权限例外:
- 找到项目中的
platforms/ios/[你的App名称]/Info.plist文件 - 添加以下配置(如果不存在的话):
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
注意:如果是上线应用,更推荐针对特定域名配置例外,而不是全局允许任意加载,避免App Store审核问题。
4. 备选方案:拦截跳转(如果_blank仍不生效)
如果上述方案都无效,可以尝试将target设为_self,然后通过loadstart事件拦截需要跳转的链接,手动打开新的InAppBrowser窗口:
let target = '_self'; const browser = this.iab.create(this.url, target, options); browser.on("loadstart").subscribe(event => { const targetUrl = event.url; // 判断是否是需要在新窗口打开的链接 if (targetUrl !== this.url) { browser.close(); // 关闭当前窗口 // 打开新的InAppBrowser窗口 this.iab.create(targetUrl, '_blank', options); } // 你的原有错误处理逻辑 if (targetUrl.indexOf("qwertyerror_message") > -1) { let error_status = this.getParameterByName('qwertyerror...'); // 后续处理 } });
内容的提问来源于stack exchange,提问作者Mohamed Arshath
相关产品推荐
相关产品推荐

