HarmonyOS 鸿蒙Next web 组件打开的pdf 文件,右上角的下载点击没反应,如何让右上角点击的下载有反应

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

HarmonyOS 鸿蒙Next web 组件打开的pdf 文件,右上角的下载点击没反应,如何让右上角点击的下载有反应

web 组件打开的pdf 文件,右上角的下载点击没反应,如何让右上角点击的下载有反应

2 回复
import web_webview from '@ohos.web.webview'
import business_error, { BusinessError } from '@ohos.base'
import { picker } from '@kit.CoreFileKit';
import fs from '@ohos.file.fs';

@Entry
@Component
struct WebComponent {
  controller: web_webview.WebviewController = new web_webview.WebviewController();
  delegate: web_webview.WebDownloadDelegate = new web_webview.WebDownloadDelegate();

  build() {
    Column() {
      Button('setDownloadDelegate')
        .onClick(() => {
          try {
            this.delegate.onBeforeDownload((webDownloadItem: web_webview.WebDownloadItem) => {
              console.log("======will start a download." + webDownloadItem.getSuggestedFileName());
              webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());

              // webDownloadItem.start("/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName());
            })
            this.delegate.onDownloadUpdated((webDownloadItem: web_webview.WebDownloadItem) => {
              console.log("======download update guid: " + webDownloadItem.getGuid());
            })
            this.delegate.onDownloadFailed((webDownloadItem: web_webview.WebDownloadItem) => {
              console.log("download failed guid: " + webDownloadItem.getGuid());
            })
            this.delegate.onDownloadFinish((webDownloadItem: web_webview.WebDownloadItem) => {
              console.log("======download finish guid: " + webDownloadItem.getGuid());
              console.log("======downloadFullPath:" + webDownloadItem.getFullPath())


              let documentSaveOptions = new picker.DocumentSaveOptions();
              documentSaveOptions.newFileNames = [webDownloadItem.getSuggestedFileName()];
              let documentPicker = new picker.DocumentViewPicker();
              documentPicker.save(documentSaveOptions).then((documentSaveResult: Array<string>) => {
                let uri = documentSaveResult[0];
                let path = "/data/storage/el2/base/cache/web/" + webDownloadItem.getSuggestedFileName()
                let sanFile = fs.openSync(path, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
                let pubFile = fs.openSync(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
                fs.copyFileSync(sanFile.fd, pubFile.fd)
                console.info('DocumentViewPicker.save successfully, DocumentSaveResult uri: ' +
                JSON.stringify(documentSaveResult));
              }).catch((err: BusinessError) => {
                console.error('DocumentViewPicker.save failed with err: ' + JSON.stringify(err));
              });

            })
            this.controller.setDownloadDelegate(this.delegate);
          } catch (error) {
            let e: business_error.BusinessError = error as business_error.BusinessError;
            console.error(`ErrorCode: ${e.code}, Message: ${e.message}`);
          }
        })
      Button('startDownload')
        .onClick(() => {
          try {
            this.controller.startDownload('https://prdc-ams.oss-cn-shenzhen.aliyuncs.com/1700182405099.pdf');
          } catch (error) {
            let e: business_error.BusinessError = error as business_error.BusinessError;
            console.error(`ErrorCode: ${e.code}, Message: ${e.message}`);
          }
        })
      Web({ src: 'www.baidu.com', controller: this.controller })
    }.margin({ top: 200 })
  }
}

目前只能先将pdf下载到沙箱后然后通过文管的接口下载copy到文件管理器。整个流程就是先点击setDownloadDelegate按钮向Web注册一个监听类,然后点击startDownload主动发起了一个下载, 该下载任务也会通过设置的DownloadDelegate来通知app下载的进度。 参考链接:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/web/web-download.md

更多关于HarmonyOS 鸿蒙Next web 组件打开的pdf 文件,右上角的下载点击没反应,如何让右上角点击的下载有反应的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next web组件中,若遇到PDF文件右上角下载按钮无反应的问题,可能是由于以下几个原因导致的:

  1. 事件绑定问题:检查是否正确地为下载按钮绑定了点击事件。确保事件监听器已正确添加到按钮元素上,并且事件处理函数能够正确执行。

  2. 权限问题:确认应用是否具备下载文件的权限。在鸿蒙系统中,需要确保应用已在manifest文件中声明了必要的权限,如WRITE_EXTERNAL_STORAGE。

  3. 文件路径问题:验证PDF文件的路径是否正确,确保文件路径对应用是可访问的。如果文件路径错误或文件不存在,下载功能将无法正常工作。

  4. 下载逻辑实现:检查下载功能的实现逻辑是否正确。确保在点击事件触发时,能够正确执行文件下载操作,包括创建下载任务、指定下载路径等。

  5. UI组件状态:确认下载按钮的UI组件状态是否正确,如是否被禁用或隐藏,这可能导致点击事件无法触发。

如果上述检查均无误,但问题依旧存在,可能是由于系统或组件的bug导致的。此时,建议直接联系鸿蒙系统的官方客服进行反馈和查询。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部