HarmonyOS 鸿蒙Next:web组件如何实现直接监听网页下载行为并下载

发布于 1周前 作者 yuanlaile 来自 鸿蒙OS

HarmonyOS 鸿蒙Next:web组件如何实现直接监听网页下载行为并下载 在文档中的示例中是用了button组件来触发下载,有没有什么办法在页面加载时就注册监听,然后当网页中有下载任务时就触发下载并保存到download目录呢

6 回复

下载回调可以借鉴以下代码:

//这里测试的是下载文件到download目录,伙伴测试需要开下网络权限
let context = getContext(this) as common.UIAbilityContext
const documentViewPicker = new picker.DocumentViewPicker(context);

let sanPath = context.filesDir + "/" + Date.now() + ".docx";
request.downloadFile(context,
  {
    url: 'https://xxx',
    filePath: sanPath
})
.then((downloadTask: request.DownloadTask) => {
  downloadTask.on('complete', () => {
    console.info('download complete');
    const documentSaveOptions = new picker.DocumentSaveOptions();
    documentSaveOptions.pickerMode = picker.DocumentPickerMode.DOWNLOAD;

    // 创建文件管理器保存选项实例 documentSaveOptions.pickerMode = picker.DocumentPickerMode.DOWNLOAD
    // 保存文件名(可选) const documentViewPicker = new picker.DocumentViewPicker;
    documentViewPicker.save(documentSaveOptions).then(async (documentSaveResult) => {
      // 获取到到图片或者视频文件的URI后进行文件读取等操作
      let uri = documentSaveResult[0];
      //把这里的path存起来,作为后续保存文件的path
      // let path: string = new FileUri.FileUri(uri).path
      let path: string = 'file://docs/storage/Users/currentUser/Download/com.example.test'

      let filePath: string = `${path}/test.docx`;

      // 测试权限并创建
      // const testCreateFile = await fs.open(filePath, fs.OpenMode.CREATE)

      console.info('pub uri:' + uri)
      // // 沙箱路径文件
      // let sanFile = fs.openSync(sanPath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
      // let pubFile = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
      // // 将文件从沙箱路拷贝到公共路径
      // fs.copyFileSync(sanFile.fd, pubFile.fd)
    })
    .catch((err: Error) => {
      console.error(`Invoke documentPicker.select failed, message is ${err.message}`);
    })
  })
}).catch((err: BusinessError) => {
  console.error(`Invoke downloadTask failed, code is ${err.code}, 1message is ${err.message}`);
});

更多关于HarmonyOS 鸿蒙Next:web组件如何实现直接监听网页下载行为并下载的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


网页中有下载任务有出发按钮或者事件吗?H5内触发的下载可以通过和原生鸿蒙的通信机制,绑定arkts的回调函数。我理解监听H5中下载任务你应该去找前端的解决方案,不管你是用addeventlistener还是rxjs中的监听对象,最后只要能实现和原生鸿蒙的同通信即可

网页里有触发下载的事件,我用 .onDownloadStart 可以打印出下载链接来,但是我不知道怎样才能用这个链接下载到指定目录,

同样的问题 有方法了吗,

兄弟,同样问题有解决方法了没,

在HarmonyOS鸿蒙Next系统中,web组件若要实现直接监听网页下载行为并下载,主要依赖于系统提供的Webview组件的能力以及鸿蒙系统的API支持。以下是一个简洁的说明:

HarmonyOS的Webview组件允许嵌入网页内容,并通过JavaScript接口与原生应用进行交互。要实现监听网页下载行为,首先需要确保Webview组件加载的网页中包含触发下载的链接或按钮,并且这些链接或按钮通过JavaScript事件(如click事件)进行监听。

当监听到下载事件时,可以通过JavaScript调用鸿蒙系统提供的JS接口,将下载链接传递给原生应用。原生应用接收到下载链接后,可以使用鸿蒙系统提供的下载管理器(Download Manager)API来启动下载任务。

需要注意的是,鸿蒙系统的Webview组件和下载管理器API的使用需要遵循鸿蒙系统的开发规范,并且可能需要相应的权限声明。

实现过程中,开发者需要确保网页中的JavaScript代码与鸿蒙原生代码之间的通信是安全可靠的,避免潜在的安全风险。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html,

回到顶部