HarmonyOS 鸿蒙Next Web下载怎么导出到外部浏览器

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

HarmonyOS 鸿蒙Next Web下载怎么导出到外部浏览器 创建Web打开链接: https://posts.tenpay.com/posts/18ed0968618e3db204d4931651708953.html

点击顶部“协议下载”

配合

.onDownloadStart((event) => {
  if (event) {
    console.log('url:' + event.url)
    const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext
    startBrowsableAbility(context, event.url)
  }
})

startBrowsableAbility(context, event.url)如何实现?

目前提示:“无法打开此链接,可前往应用市场查找更多应用。”

此链接:https://posts.tenpay.com/436787c4-bf27-4e76-add0-55c0f1bb944b


更多关于HarmonyOS 鸿蒙Next Web下载怎么导出到外部浏览器的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

可以参考以下代码:

import { webview } from '@kit.ArkWeb';
import { BusinessError } from '@kit.BasicServicesKit';
import { abilityAccessCtrl, common, Want } from '@kit.AbilityKit';

function startBrowsableAbility(context: common.UIAbilityContext, myurl: string): void {
  let want: Want = {
    action: 'ohos.want.action.viewData',
    entities: ['entity.system.browsable'],
    uri: myurl
  };
  context.startAbility(want).then(() => {
    console.log('success')
  }).catch((err: BusinessError) => {
    console.error(`Failed to startAbility. Code: ${err.code}, message: ${err.message}`);
  });
}

let pathVideo: string = getContext().filesDir + '/preview.mp4';

@Entry
@Component
struct Index {
  controller: webview.WebviewController = new webview.WebviewController();
  @State webResult: boolean = true
  @State delegate: webview.WebDownloadDelegate = new webview.WebDownloadDelegate();
  @State download: webview.WebDownloadItem = new webview.WebDownloadItem();
  @State failedData: Uint8Array = new Uint8Array();
  atManager = abilityAccessCtrl.createAtManager();
  private appContext: common.Context = getContext(this);

  aboutToAppear(): void {
    webview.WebviewController.setWebDebuggingAccess(true)
  }

  downPdf(url: string) {
    try {
      this.delegate.onBeforeDownload((webDownloadItem: webview.WebDownloadItem) => {
        console.log('will start a download.');
        webDownloadItem.start('/data/storage/el2/base/haps/entry/files/' +
        webDownloadItem.getSuggestedFileName());
      })
      this.delegate.onDownloadUpdated((webDownloadItem: webview.WebDownloadItem) => {
        console.log('download update percent complete: ' + webDownloadItem.getPercentComplete());
        this.download = webDownloadItem;
      })
      this.delegate.onDownloadFailed((webDownloadItem: webview.WebDownloadItem) => {
        console.log('download failed guid: ' + webDownloadItem.getGuid());
        this.failedData = webDownloadItem.serialize();
      })
      this.delegate.onDownloadFinish((webDownloadItem: webview.WebDownloadItem) => {
        console.log('download finish guid: ' + webDownloadItem.getGuid());
      })
      this.controller.setDownloadDelegate(this.delegate);
      webview.WebDownloadManager.setDownloadDelegate(this.delegate);
    } catch (error) {
      console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`);
    }
    setTimeout(() => {
      this.controller.startDownload(url);
    }, 20)
  }

  build() {
    Column() {
      Web({ src: 'https://posts.tenpay.com/posts/18ed0968618e3db204d4931651708953.html', controller: this.controller })
        .javaScriptAccess(true)
        .fileAccess(true)
        .onInterceptRequest((event) => {
          if (!event) {
            return
          }
          console.log('url为: ' + event.request.getRequestUrl())
          let url1 = event.request.getRequestUrl()
          if (url1 == 'https://6366-cft-new-8gyrr3es11e9c257-1258344698.tcb.qcloud.la/cloudbase-cms/upload/2023-12-18/0tbndhsk6ldf06jpw8b9414dud1zbbw7/%E8%B4%A2%E4%BB%98%E9%80%9A%E9%9A%90%E7%A7%81%E6%94%BF%E7%AD%96_20231218.pdf') {
            let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
            let myurl = url1;
            startBrowsableAbility(context, myurl);
          }
          return null
        })
    }
  }
}

注释的代码为web组件下载到沙箱的方案,目前不能直接下载到本地,建议直接使用want跳转到浏览器下载

更多关于HarmonyOS 鸿蒙Next Web下载怎么导出到外部浏览器的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


当前不支持blob:url此类链接在外部浏览器下载。您可以获取传递真实的pdf地址,然后通过下列方式跳转到系统浏览器查看和下载。

function startBrowsableAbility(context: common.UIAbilityContext, myurl: string): void {
  let want: Want = {
    action: 'ohos.want.action.viewData',
    entities: ['entity.system.browsable'],
    uri: 'https://xxx.com/xxx.pdf'
  };
  context.startAbility(want).then(() => {
    console.log('success')
  }).catch((err: BusinessError) => {
    console.error(`Failed to startAbility. Code: ${err.code}, message: ${err.message}`);
  });
}

或者参考微信里打开 https://posts.tenpay.com/posts/18ed0968618e3db204d4931651708953.html 的效果,应用内点击“协议下载”提示点击右上角“…”中使用系统浏览器打开该地址,在系统浏览器中点击“协议下载”触发下载文件操作。

针对“HarmonyOS 鸿蒙Next Web下载怎么导出到外部浏览器”的问题,以下是直接且专业的回答:

在HarmonyOS系统中,若要将Next Web的下载内容导出到外部浏览器,通常你需要先确定下载的内容类型和存储位置。以下步骤可能有助于你实现这一目标:

  1. 确认下载内容:首先,在Next Web应用中确认你已经完成了所需内容的下载,并了解下载文件的格式(如APK、文档、图片等)。

  2. 查找下载位置:HarmonyOS通常会提供一个文件管理器应用,你可以在其中找到Next Web下载的文件。默认情况下,这些文件可能存储在“下载”文件夹中。

  3. 选择并分享:在文件管理器中,长按你想要导出的文件,然后选择“分享”或“用其他应用打开”选项。在弹出的应用列表中,选择你想要使用的外部浏览器(如Chrome、Firefox等)。

  4. 在浏览器中处理:外部浏览器会根据文件的类型提供相应的打开或保存选项。例如,对于APK文件,浏览器可能会提示你安装;对于文档或图片,则可以直接在浏览器中查看或进一步处理。

如果上述步骤无法解决问题,可能是由于特定的权限设置或应用兼容性问题。此时,你可以尝试检查应用的权限设置,或直接在HarmonyOS的设置中搜索相关解决方案。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部