Ionic3应用中InAppBrowser遮挡AdMob Banner问题求助
我之前在做Ionic+Cordova项目时也碰到过这个问题,这算是插件组合开发里的常见场景,下面给你几个可行的解决方案,按推荐程度排序:
方案1:调整InAppBrowser窗口尺寸,避开Banner区域
这是最直接也最容易落地的方法。默认InAppBrowser是全屏显示的,我们可以通过配置参数手动指定它的位置和高度,把Banner的展示区域预留出来。
首先你需要确定Banner的高度(AdMob移动端Banner常规高度是50px左右,也可以通过AdMob插件的回调获取实际高度,比如admob.banner.getSize()),然后计算InAppBrowser的可用高度:
// 获取设备屏幕高度 const screenHeight = window.screen.height; // 这里用常规Banner高度示例,建议换成动态获取的实际高度 const bannerHeight = 50; const browserHeight = screenHeight - bannerHeight; // 打开InAppBrowser时传入尺寸配置 const browser = cordova.InAppBrowser.open( 'https://你的网站地址.com', '_blank', `location=no,toolbar=no,top=0,left=0,width=100%,height=${browserHeight}px` );
如果你的Banner是放在顶部的,就把top参数设为bannerHeight,height设为screenHeight - bannerHeight,这样InAppBrowser会从Banner下方开始显示,完全避开遮挡。
方案2:提升AdMob Banner的层级(需额外配置)
如果不想调整浏览器窗口,你可以尝试让Banner显示在InAppBrowser的上层。但因为InAppBrowser是独立的原生WebView,默认层级比主App的WebView高,所以需要修改AdMob的配置,让Banner以系统悬浮窗的形式展示:
- 先在
config.xml中添加Android权限(或直接修改AndroidManifest.xml):
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
- 初始化AdMob Banner时,设置Android专属的窗口类型参数:
admob.banner.config({ id: '你的Banner广告ID', position: admob.AD_POSITION.BOTTOM_CENTER, isTesting: true, android: { windowType: 'system_alert' // 将Banner设置为系统级悬浮窗 } }); admob.banner.prepare();
注意:Android 6.0及以上版本需要动态申请悬浮窗权限,你可能需要额外添加权限申请的代码,而且这种方式可能会被部分机型的系统安全策略限制。
方案3:用内嵌iframe替代InAppBrowser(仅限同域场景)
如果你的网站和App属于同域,或者没有跨域限制,可以考虑在Ionic页面里用iframe内嵌网站,然后把Banner放在页面的footer或header区域:
<ion-content> <iframe src="https://你的网站地址.com" style="width: 100%; height: calc(100% - 50px); border: none;" ></iframe> </ion-content> <ion-footer> <!-- 这里可以放置AdMob Banner的容器,或让插件直接渲染在footer位置 --> </ion-footer>
这种方法的缺点是iframe的功能不如InAppBrowser完善,比如没有自带的导航栏,处理页面跳转需要自己监听事件,而且跨域网站会有很多限制,所以只推荐给同域场景使用。
内容的提问来源于stack exchange,提问作者Rahul Kumar

