HarmonyOS 鸿蒙Next应用设置跳转到系统浏览器

HarmonyOS 鸿蒙Next应用设置跳转到系统浏览器

鸿蒙应用设置跳转到系统浏览器

4 回复

开发者可以通过在 want 参数中隐式指定 action 为 ohos.want.action.viewData 来启动浏览器应用,并在 want的 uri 参数中配置要打开的网页链接。此时,系统将启动设备上的默认浏览器。如果设备上存在多个浏览器应用,并且希望用户能够自行选择要使用的浏览器,需要在 parameters 中设置 ohos.ability.params.showDefaultPicker 为 true。具体代码如下所示。

import { common, Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
function startBrowsableAbility(context: common.UIAbilityContext): void {
  let want: Want = {
    action: 'ohos.want.action.viewData',
    entities: ['entity.system.browsable'],
    uri: 'https://www.huawei.com/',
    parameters: {
      'ohos.ability.params.showDefaultPicker': true
    }
  };
  context.startAbility(want)
    .then(() => {
      console.error('Start browsableAbility successfully.');
    })
    .catch((err: BusinessError) => {
      console.error(`Failed to startAbility. Code: ${err.code}, message: ${err.message}`);
    });
}
@Entry
@Component
struct BrowsableAbilityView {
  @State message: string = 'Pull up the browser and open the Huawei official website';
  build() {
    Row() {
      Column() {
        Button(this.message)
          .fontSize(24)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            const context: common.UIAbilityContext = this.getUIContext().getHostContext()! as common.UIAbilityContext;
            startBrowsableAbility(context);
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next应用设置跳转到系统浏览器的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


方案一:

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中,应用可以通过wantstartAbility来启动系统浏览器并打开指定URL。这主要依赖于系统预置的浏览器Ability。

核心步骤如下:

  1. 配置权限:在module.json5文件的abilities标签同级,添加requestPermissions声明网络权限(如果需要打开网络链接):

    "requestPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      }
    ]
    
  2. 构造Want对象:定义一个Want对象,指定要启动的Ability。启动系统浏览器通常使用以下参数:

    • action: 操作意图,常用 "ohos.want.action.viewData" 表示查看数据。
    • uri: 要打开的完整网址(例如 "https://developer.harmonyos.com")。这是最关键参数。
    • entities: 可指定实体类别,如 ["entity.system.browsable"] 表示可浏览的实体,有助于系统准确匹配浏览器。
  3. 调用startAbility:使用UIAbilityContextAbilityContextstartAbility方法,传入构造好的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的跨应用交互模型。

回到顶部