HarmonyOS 鸿蒙Next模拟在浏览器中打开Deeplink的实现方法
HarmonyOS 鸿蒙Next模拟在浏览器中打开Deeplink的实现方法 Deeplink能力是端外拉起应用的一种有效方式,常常通过网页来拉起已安装的应用并跳转到特定界面。HarmonyOS 系统自带的浏览器支持Deeplink链接的打开能力,但需要通过网页才能触发打开动作。由于浏览器不支持打开本地html页面,且直接输入Deeplink链接到地址栏不触发Deeplink跳转,所以没办法直接在本地测试Deeplink打开能力。
【解决办法】
可以通过本地代码写一个Demo,模拟浏览器拉起Deeplink的动作,这样可以避免构造网页的工作,直接拉起目标应用。
利用浏览器触发Deeplink拉起动作,需要构造Want,并使用startAbility方式打开,Demo代码如下:
private startBrowser(uriString: string) {
let want: Want = {
action: "ohos.want.action.viewData",
bundleName: "com.huawei.hmos.browser",
abilityName: "MainAbility",
uri: uriString
}
let context = getContext(this) as common.UIAbilityContext;
context.startAbility(want).then(() => {
hilog.error(0x0000, "startBrowser", `startAbility success`);
}).catch((err: BusinessError) => {
hilog.error(0x0000, "startBrowser", `startAbility failed:${JSON.stringify(err)}`);
});
}
其中的uriString就是需要打开的Deeplink地址,例如,一个打开测试应用详情页的Deeplink地址:
const uri = 'store://*****.huawei.com/app/test?taskId=12345&invitationCode=554433';
通过上面的startBrowser方法,传入相应的Deeplink的uri字符串,就可以拉起浏览器,再通过浏览器触发应用拉起了。
需要注意的是,应用想要响应Deeplink拉起,需要注册viewData action和scheme+host,这样才能匹配到。如果有多个应用注册了相同的scheme+host,就会拉起应用选择框,让用户选择某个应用。
Deeplink响应的声明,需要在module.json5文件的接收Ability中skills项中增加action和uris内容:
"skills": [
{
...
"actions": [
"ohos.want.action.viewData" // 声明Deeplink接收的Action,这个是固定的
...
],
"uris": [
{
// scheme尽量做到唯一
"scheme": "deeplink",
"host": "app.host" // host不与其他应用相同,这样可以减少冲突
}
...
]
...
}
]
更多关于HarmonyOS 鸿蒙Next模拟在浏览器中打开Deeplink的实现方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
鸿蒙Next中实现Deeplink在浏览器中打开,主要通过Ability的隐式启动方式。在module.json5配置文件中,为EntryAbility添加skills字段,并设置actions为"ohos.want.action.viewData",uris的scheme为"http"或"https"。当系统检测到匹配的URI时,会启动默认浏览器应用处理该链接。此过程由系统统一调度,应用无需直接调用浏览器。
在HarmonyOS Next中,模拟浏览器打开DeepLink进行本地测试,核心是绕过浏览器对本地文件协议(file://)的限制。由于系统浏览器出于安全策略,不会响应来自本地HTML页面的intent://或自定义Scheme请求,直接测试确实不便。
一个高效的本地测试方案是:在开发设备上搭建一个简易的本地HTTP服务器,通过http://localhost或本地IP地址来访问测试页面,从而完全模拟真实的网页触发环境。
具体实现步骤:
-
创建测试HTML页面:编写一个包含HarmonyOS DeepLink格式(如
intent://或您应用注册的自定义Schememyapp://path)的简单HTML文件。使用一个按钮或自动执行JavaScript来触发跳转。<!DOCTYPE html> <html> <body> <button onclick="window.location.href='myapp://detail?id=123'"> 点击打开应用 </button> <!-- 或自动触发 --> <script> setTimeout(function() { window.location.href = 'myapp://detail?id=123'; }, 1000); </script> </body> </html> -
启动本地HTTP服务器:在存放该HTML文件的目录下,使用命令行工具启动一个本地服务器。例如,使用Python:
python3 -m http.server 8080或者使用Node.js的
http-server等工具。确保服务器运行在http://localhost:8080或您的设备IP(如http://192.168.x.x:8080)上。 -
在设备浏览器中访问:在HarmonyOS设备或模拟器的系统浏览器中,输入本地服务器的地址(例如
http://localhost:8080/test.html)来访问该测试页面。此时点击按钮或等待脚本执行,浏览器将识别并尝试打开对应的DeepLink,触发应用拉起。
关键原理:此方法的核心是将触发源从“本地文件”变为“网络请求”,使浏览器能按照标准流程处理Intent或自定义Scheme。这符合HarmonyOS Next中Web组件对Intent协议的支持规范,是官方推荐的本地功能验证方式。
注意事项:
- 确保您的HarmonyOS应用已在
module.json5中正确配置了skills的entities和actions,以响应对应的URI。 - 如果使用
intent://格式,需遵循HarmonyOS Intent的完整格式规范。 - 此方法仅用于开发阶段的功能验证,上线前仍需在真实网络页面进行完整测试。

