{
"path": "pages/user/user",
"style": {
"navigationBarTitleText": "",
"navigationBarBackgroundColor": "#007aff",
"navigationBarTextStyle": "white",
"app-plus": {
"titleNView": {
"buttons": [{
"text": "我的",
"fontSize": "19",
"float": "left",
"fontWeight": "bold",
"width": "auto"
}]
}
}
}
}
- 发布:43 分钟前
- 更新:17 分钟前
- 阅读:32
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: win 11
HBuilderX类型: 正式
HBuilderX版本号: 5.24
手机系统: iOS
手机系统版本号: iOS 16
手机厂商: 苹果
手机机型: iphone 16
页面类型: vue
vue版本: vue2
打包方式: 云端
项目创建方式: HBuilderX
示例代码:
操作步骤:
-
-
预期结果:
-
-
实际结果:
-
-
bug描述:
没有开通过广告,为什么navigationBar会出现广告?这种现象是突然发生的,无法再重现。app里确认没有改过navigationBarTitleText,
请问是什么原因
欢迎到专业群( uni-ad交流群 ) 咨询,群中有相关专业的管理员和群友。
针对您反馈的 Bug,以下是作为 DCloud 官方人员对该问题的评审与分析:
1. Bug 反馈内容完整性分析
- BUG 描述:描述中提到“没有开通过广告,navigationBar 出现广告,且 app 里没有赋值 navigationBarTitleText”。从 uni-ad 广告变现与工程接入的角度来看,uni-ad 广告的展示是通过特定的广告组件(如
<ad>)或开屏等独立场景实现的,并不会自动注入到普通的navigationBar中。您的描述能让官方理解现象,但缺少排查该异常广告来源的关键线索。 - 代码示例:提供了
pages.json中关于titleNView的配置,但这属于常规的原生导航栏配置,其中并未包含任何 uni-ad 广告组件(如<ad>)或广告位 ID(adpid)。代码片段不完整,无法直接运行复现包含广告的完整页面场景。 - 复现步骤:标注为“无”。由于该现象是突然发生且无法重新复现,官方人员无法根据现有信息进行复现,也无法判断该“广告”是 H5 页面被劫持注入、原生层级覆盖,还是其他第三方 SDK 的行为。
- 预期结果与实际结果:均标注为“-”,未提供明确说明。
- 分类信息:包含了开发环境、HBuilderX 版本、手机平台与机型等基础信息,但缺少打包方式(云端/本地)、是否使用标准基座/自定义基座等关键信息。
- 附件说明:请注意,系统当前无法识别和查看附件内容。
2. Bug 是否成立及原因分析
结合知识库与 uni-ad 广告接入规范分析,该 Bug 现象不成立为 uni-app 框架或 uni-ad 广告 SDK 的缺陷。原因如下:
- uni-ad 广告接入机制:uni-ad 广告必须通过开发者主动创建广告位获取
adpid,并在代码中使用对应的广告组件(如<ad>、<ad-rewarded-video>等)接入,或者通过 uni-ad 后台开通 DCloud 快捷广告(如开屏、悬浮红包)。这些广告均有严格的展示场景和原生组件层级,不会自动显示在未配置任何广告组件的普通navigationBar标题栏上。 - 可能的原因排查:
- DCloud 快捷广告(悬浮红包等):若您在 uni-ad 后台无意中开启了 DCloud 快捷广告(如悬浮红包),打包时包含了相关模块,可能会在应用内出现广告。建议登录 uni-ad 控制台,在“应用详情 -> DCloud 快捷广告”中检查并关闭悬浮红包等功能。
- 网络劫持或第三方注入:如果您的应用内加载了外部 H5 页面或使用了未加密的 Webview,可能会遇到网络运营商劫持或 H5 页面内部的第三方广告脚本注入,导致在页面顶部出现类似“广告”的元素。
- 原生层级覆盖:某些第三方 SDK(如推送、统计 SDK)可能会在顶部弹出原生视图,视觉上可能被误认为是 navigationBar 出现了广告。
由于目前信息不足且无法复现,暂无法定性为框架 Bug。建议您后续若再次遇到该现象,截图记录广告的具体表现形式,并排查应用内是否加载了外部网页或引入了其他第三方 SDK。
百搜全端云 - 百搜开发团队
Uni‑App iOS 导航栏偶然出现陌生广告文字问题分析
现象:pages.json 配置navigationBarTitleText:"",偶现、无法稳定复现,导航栏中间莫名出现第三方广告文字,不是业务代码设置,iOS 云打包出现,Vue2 + HBuilderX5.24。截图标题栏出现:西安搜铺·找铺转铺。
?根本原因(优先级从高到低)
1、原生插件内存污染(最高概率,真实社区同类案例)
第三方 App 原生插件(aar/framework)内部存在 WebView / 窗口缓存泄漏,插件内部打开过 web 页面,web 页面的网页标题,泄漏污染当前页面 titleNView 导航栏内存,偶然把网页标题刷到当前 App 原生导航栏上。
特征:偶现,很难复现;文字是某个 H5 网页标题(广告、商铺推广),业务代码完全搜不到该字符串;仅特定机型、特定操作路径触发内存覆盖。
⚠️不是 DCloud 官方注入广告,DCloud 不会私自给 App 注入广告文字。
触发条件:你的项目引入多个 iOS 原生 SDK 插件,插件内部创建 plus.webview,没有彻底销毁窗口,webview 的title残留,跨页面污染 titleNView 原生控件。
2、代码调用uni.setNavigationBarTitle()时机异常(JS 层)
虽然你确认没写,但是第三方组件 / 插件 JS 内部间接调用了这个 API。
JS 搜索全局:setNavigationBarTitle,检查所有插件、混入 mixin。
注意:pages.json 的navigationBarTitleText仅页面首次创建读取一次;JS API 可以随时改写原生导航标题,不受 pages.json 静态配置约束。
3、云打包缓存污染(概率低)
旧打包缓存,插件编译产物残留。清理.unpackage、清理项目,重新云打包,使用全新打包证书测试。
4、webview 子窗口残留
项目中使用plus.webview.create()打开网页,webview 没有 close 销毁,只是 hide 隐藏;隐藏 webview 的网页标题,偶发窜到主页面导航栏。
✅完整排查步骤(按顺序执行)
步骤 1:定位来源,抓异常时标题值
在 App.vue 全局监听,捕获导航栏被篡改:
js
运行
// App.vue onShow
plus.globalEvent.addEventListener('newtitle',function(e){
console.log("捕获到导航栏被设置标题:",e.title);
})
如果异常发生时打印出广告文字,就能确认是哪个逻辑 / 插件触发。
步骤 2:排查全部原生插件
临时全部移除自定义原生插件,打测试包,长时间反复操作,看是否复现;
如果移除插件后不再复现:逐个加回插件,定位是哪一个原生 SDK/framework 插件造成内存污染;
重点检查包含 webview、网页加载、推送、客服类第三方原生插件(米多客正好是客服 SDK,截图里面 App 叫米多客企业版,高度怀疑这个客服插件内部 webview 泄漏)。
步骤 3:检查项目所有 plus.webview 窗口
所有 webview 不要只调用.hide();业务结束务必执行.close()销毁窗口,禁止长期隐藏不销毁 webview,避免网页标题内存残留泄漏。
步骤 4:pages.json 加固配置
你的 pages.json 配置增加titleText:"",在 app‑plus.titleNView 显式置空标题,不要仅依靠顶层navigationBarTitleText:"":
json
{
"path":"pages/user/user",
"style":{
"navigationBarTitleText":"",
"navigationBarBackgroundColor":"#007aff",
"navigationBarTextStyle":"white",
"app-plus":{
"titleNView":{
"titleText":"", // 【关键】titleNView内部强制置空标题
"buttons":[{
"text":"我的",
"fontSize":"19",
"float":"left",
"fontWeight":"bold",
"width":"auto"
}]
}
}
}
}
注意:navigationBarTitleText是框架层,titleNView 的 titleText 才是原生导航栏真正读取字段;只设置外层,app‑plus.titleNView 没有设置 titleText,原生层会出现随机内存回写。
步骤 5:兜底修复代码,页面 onShow 强制重置导航标题
在 pages/user/user 页面 onShow,每次页面显示强制重置原生导航栏,覆盖被污染的值:
js
运行
onShow(){
// 页面每次显示强制清空原生导航标题,兜底防止内存污染窜文字
uni.setNavigationBarTitle({title:""})
}
步骤 6:清理打包缓存
删除项目目录.unpackage文件夹
HBuilderX → 项目 → 清理项目
重新云打包(不要复用旧打包缓存)
❗重要判断
截图的 “米多客企业版” 是客服 SDK,该 SDK 内部大量使用 plus.webview 加载网页;社区有同类反馈:客服 SDK 隐藏 webview 不 close,网页标题偶现泄漏污染原生导航栏,出现网页广告文字。
高嫌疑:米多客原生 iOS 插件 webview 窗口未 close 导致内存污染。
为什么无法稳定复现?
属于原生内存踩坑 bug,不是 100% 必现逻辑;只有特定页面跳转、内存回收时机巧合才会把 webview 的网页标题字符串覆盖到 titleNView 标题内存位置;测试很难稳定复现,只能做防御式代码加固。