鸿蒙next系统使用plus.runtime.openURL不生效。在手机浏览器中打开H5端,window.open打开新的页面连接不变了,显示浏览器的默认连接,使用webview页面也是空白的(左侧是预期效果,右边是实际效果)
- 发布:2026-02-02 11:08
- 更新:2026-02-02 11:19
- 阅读:16
鸿蒙next系统使用plus.runtime.openURL不生效。在手机浏览器中打开H5端,window.open打开新的页面连接不变了,显示浏览器的默认连接
欢迎到专业群( HBuilderX技术交流群 ) 咨询,群中有相关专业的管理员和群友。
在鸿蒙 Next 系统里,plus.runtime.openURL 确实已经失效,原因是 HarmonyOS 的 Want 机制 替换了 Android 的 Intent 机制,而 5+ runtime 尚未适配。
知识库已给出官方替代方案:使用 UTS 插件(或现成的 uts-openSchema 插件)来调用系统浏览器。
下面给出最简洁、可直接落地的做法,分 App 端与 H5 端两条线说明。
1. App 端(uni-app 5+ / uni-app-x)
1.1 一键方案:安装官方插件(推荐)
- HBuilderX → 插件市场 → 搜索 uts-openSchema → 点击【下载/导入】。
- 代码中直接调用:
// #ifdef APP-HARMONY
import { openSchema } from '@/uni_modules/uts-openSchema'
openSchema('https://example.com')
// #endif
插件已内部封装好鸿蒙 Want 调用,无需自己写原生代码。
1.2 手动方案:自建 UTS 插件(无网络时可参考)
如不想装插件,可在 uni_modules 里新建原生插件:
// uni_modules/my-open-url/utssdk/app-harmony/index.ets
import featureAbility from '@ohos.ability.featureAbility'
export function openOuterUrl(url: string) {
const want = {
action: 'ohos.want.action.viewData',
entities: ['entity.system.browsable'],
uri: url
}
featureAbility.getContext().startAbility(want)
}
页面调用:
// #ifdef APP-HARMONY
import { openOuterUrl } from '@/uni_modules/my-open-url'
openOuterUrl('https://example.com')
// #endif
2. H5 端(手机浏览器直接访问)
浏览器安全策略会拦截 window.open 的异步调用,表现为“地址栏不变”。
解决方式只有两种:
- 让用户主动点击超链接:
<a target="_blank" rel="noopener" href="https://example.com">立即打开</a>
- 企业内浏览器可把域名加入白名单(普通公网浏览器无法干预)。
HBuilderX 无法影响浏览器安全策略,因此 H5 端无代码级修复方案。
3. WebView 空白页问题(若存在)
如果 App 内嵌 WebView 出现空白,请确认:
- 加载的 H5 地址在
pages.json的network白名单内; - 服务器允许 iframe 嵌套(
X-Frame-Options未禁止); - 使用最新版
uni.webview.js(官方下载)并在UniAppJSBridgeReady后再调用相关 API。
小结
| 场景 | 推荐做法 |
|---|---|
| App-Harmony | 安装 uts-openSchema 插件,一行代码即可 |
| App-Android/iOS | 继续使用 plus.runtime.openURL 或同一插件 |
| 纯 H5 | 只能让用户点击 <a target="_blank">,无法自动跳转 |
按以上步骤即可在鸿蒙 Next 系统正常打开外部链接。
3***@qq.com (作者)
刚刚测试使用了一个手机型号是 PORSCHE DESIGN HUAWEI Mate 30,也无法打开,页面一样是空白的
另外一个型号的HUAWEI P20Pro则可以正常渲染页面,
这两个型号的手机存在什么差别吗