HarmonyOS 鸿蒙Next应用设置跳转到系统浏览器
HarmonyOS 鸿蒙Next应用设置跳转到系统浏览器
鸿蒙应用设置跳转到系统浏览器
4 回复
方案一:
import { common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
@Entry
@Component
struct SysWebTestPage {
private TAG: string = "SysWebTestPage";
private onClickJumpWeb = () => {
const context = getContext(this) as common.UIAbilityContext;
context.openLink('https://www.qq.com', { appLinkingOnly: false })
.then(() => {
console.info(this.TAG, 'jump success.');
})
.catch((error: BusinessError) => {
console.error(this.TAG, "jump failed. error:" + JSON.stringify(error));
});
}
build() {
Column() {
Button("点击跳转系统浏览器").onClick(this.onClickJumpWeb)
}
.width("100%")
.height("100%")
.justifyContent(FlexAlign.Center)
}
}
方案二:
/**
* 拉起系统浏览器
* @param url 要打开的网页地址
* @returns 返回一个Promise,该Promise解析为void
*/
static async toWebBrowser(url: string): Promise<void> {
// 获取当前应用的UIAbility上下文
let context = AppUtil.getContext();
// 创建一个Want对象,用于描述启动系统浏览器的意图
let want: Want = {
// 指定动作类型,这里使用的是查看数据的动作
action: 'ohos.want.action.viewData',
// 指定实体类型,这里表示可浏览的实体
entities: ['entity.system.browsable'],
// 设置要打开的网页地址
uri: url,
// 设置额外的参数,这里包含了拉起方应用的包名
parameters: {
// 应用包名,用于标识拉起方应用
bundleName: context.abilityInfo.bundleName,
// 传递给浏览器的参数,这里同样使用了应用包名
pushParams: context.abilityInfo.bundleName,
}
};
// 使用UIAbility上下文启动系统浏览器,传入之前创建的Want对象
return await context.startAbility(want);
}
鸿蒙Next应用可通过want参数实现跳转系统浏览器。使用@ohos.app.ability.common模块的StartOptions指定ability.want.action.VIEW_ACTION动作,并传入URL参数。示例代码片段:
let want = {
action: 'ohos.want.action.view',
entities: ['entity.system.browsable'],
uri: 'https://example.com'
};
let context = ... // 获取UIAbility上下文
context.startAbility(want).catch(err => console.error(err));
需在module.json5中声明ohos.permission.INTERNET网络权限。
在HarmonyOS Next中,应用可以通过want和startAbility来启动系统浏览器并打开指定URL。这主要依赖于系统预置的浏览器Ability。
核心步骤如下:
-
配置权限:在
module.json5文件的abilities标签同级,添加requestPermissions声明网络权限(如果需要打开网络链接):"requestPermissions": [ { "name": "ohos.permission.INTERNET" } ] -
构造Want对象:定义一个
Want对象,指定要启动的Ability。启动系统浏览器通常使用以下参数:action: 操作意图,常用"ohos.want.action.viewData"表示查看数据。uri: 要打开的完整网址(例如"https://developer.harmonyos.com")。这是最关键参数。entities: 可指定实体类别,如["entity.system.browsable"]表示可浏览的实体,有助于系统准确匹配浏览器。
-
调用startAbility:使用
UIAbilityContext或AbilityContext的startAbility方法,传入构造好的Want对象来启动浏览器。
示例代码片段(在UIAbility或AbilitySlice中):
import { common, Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
// 假设这是你的UIAbility的Context
let context: common.UIAbilityContext = this.context;
let want: Want = {
action: 'ohos.want.action.viewData',
entities: ['entity.system.browsable'],
uri: 'https://developer.harmonyos.com' // 替换为你要跳转的URL
};
try {
context.startAbility(want).then(() => {
console.info('启动浏览器成功');
}).catch((error: BusinessError) => {
console.error(`启动浏览器失败,错误码: ${error.code}, 信息: ${error.message}`);
});
} catch (error) {
let err: BusinessError = error as BusinessError;
console.error(`捕获到异常,错误码: ${err.code}, 信息: ${err.message}`);
}
关键点说明:
- 权限:如果只是打开
http://或https://链接,且应用本身不需要直接访问网络,理论上浏览器自身会处理网络请求。但通常建议声明INTERNET权限以确保兼容性,尤其是应用内可能混合使用Web组件等情况。 - URI处理:
uri字段必须包含完整的协议头(如https://)。系统会根据此URI和entities设置,解析并启动能处理该类型URI的默认应用(通常是系统浏览器)。 - 错误处理:务必添加
try...catch和Promise的catch,以处理可能出现的启动失败情况(例如无默认浏览器、权限未授权等)。 - 测试:在真机或支持系统服务的模拟器上测试,确保系统预置了浏览器Ability。
这种方式是HarmonyOS Next中启动外部应用(包括浏览器)的标准方法,遵循了基于Ability的跨应用交互模型。


