HarmonyOS 鸿蒙Next web 组件打开的pdf 文件,右上角的下载点击没反应,如何让右上角点击的下载有反应
HarmonyOS 鸿蒙Next web 组件打开的pdf 文件,右上角的下载点击没反应,如何让右上角点击的下载有反应
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文件右上角下载按钮无反应的问题,可能是由于以下几个原因导致的:
-
事件绑定问题:检查是否正确地为下载按钮绑定了点击事件。确保事件监听器已正确添加到按钮元素上,并且事件处理函数能够正确执行。
-
权限问题:确认应用是否具备下载文件的权限。在鸿蒙系统中,需要确保应用已在manifest文件中声明了必要的权限,如WRITE_EXTERNAL_STORAGE。
-
文件路径问题:验证PDF文件的路径是否正确,确保文件路径对应用是可访问的。如果文件路径错误或文件不存在,下载功能将无法正常工作。
-
下载逻辑实现:检查下载功能的实现逻辑是否正确。确保在点击事件触发时,能够正确执行文件下载操作,包括创建下载任务、指定下载路径等。
-
UI组件状态:确认下载按钮的UI组件状态是否正确,如是否被禁用或隐藏,这可能导致点击事件无法触发。
如果上述检查均无误,但问题依旧存在,可能是由于系统或组件的bug导致的。此时,建议直接联系鸿蒙系统的官方客服进行反馈和查询。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html