HarmonyOS 鸿蒙Next web组件onShowFileSelector事件处理,使用弹框(相机/文件按钮)或判断前端input调用类型

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

HarmonyOS 鸿蒙Next web组件onShowFileSelector事件处理,使用弹框(相机/文件按钮)或判断前端input调用类型 web组件onShowFileSelector事件,能区分前端调用input的类型accept吗?或者我在抽取的webview组件中怎么使用弹框提示用户选择相机或者文件

2 回复

可以参考这个demo看看行不行:

// xxx.ets
import web_webview from '@ohos.web.webview';
import picker from '@ohos.file.picker';
import { BusinessError } from '@ohos.base';
import { promptAction } from '@kit.ArkUI';
@Entry
@Component
struct Index {
  controller: web_webview.WebviewController = new web_webview.WebviewController()
  dialogController: CustomDialogController = new CustomDialogController({
    builder: ShowDialog({})
  })
  @Provide event: CustomEvent | undefined = undefined
  build() {
    Column() {
      Web({ src: $rawfile('index.html'), controller: this.controller })
        .onShowFileSelector((event) => {
          this.dialogController.open()
          this.event = event
          return true
        })
    }
  }
}
@CustomDialog
struct ShowDialog {
  @Consume event: CustomEvent
  @State choice: string = ''
  controller: CustomDialogController = new CustomDialogController({
    builder: ShowDialog({})
  })
  handle(param: CustomEvent) {
    if (this.choice === '文件') {
      console.log(`当前的选择是2${this.choice}`)
      console.log('MyFileUploader onShowFileSelector invoked')
      const documentSelectOptions = new picker.DocumentSelectOptions();
      let uri: string | null = null;
      const documentViewPicker = new picker.DocumentViewPicker();
      documentViewPicker.select(documentSelectOptions).then((documentSelectResult) => {
        uri = documentSelectResult[0];
        console.info('documentViewPicker.select to file succeed and uri is:' + uri);
        if (this.event) {
          this.event.result.handleFileList([uri]);
        }
      }).catch((err: BusinessError) => {
        console.error(`Invoke documentViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
      })
    } else if (this.choice === '相机') {
      promptAction.showToast({ message: '正在开发中' })
    }
  }
  build() {
    Column({ space: 10 }) {
      Button('文件')
        .onClick(() => {
          this.choice = '文件'
          this.handle(this.event)
          this.controller.close()
        })
      Button('相机')
        .onClick(() => {
          this.choice = '相机'
          this.handle(this.event)
          this.controller.close()
        })
    }.width("100%")
    .height(400)
    .justifyContent(FlexAlign.Center)
  }
}
interface CustomEvent {
  result: FileSelectorResult,
  fileSelector: FileSelectorParam
}

更多关于HarmonyOS 鸿蒙Next web组件onShowFileSelector事件处理,使用弹框(相机/文件按钮)或判断前端input调用类型的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,处理Next web组件的onShowFileSelector事件以实现弹框(相机/文件按钮)或判断前端input调用类型,可以通过以下方式实现:

对于onShowFileSelector事件的处理,鸿蒙系统提供了相应的API接口来响应文件选择器的展示请求。这通常涉及到在Web组件的JavaScript代码中监听该事件,并根据需求触发相应的文件选择界面。

  1. 弹框实现:

    • 在Web组件的JavaScript代码中,监听onShowFileSelector事件。
    • 当事件触发时,使用鸿蒙提供的API(如filePicker)来显示文件选择器弹框,允许用户选择文件或拍照。
  2. 判断前端input调用类型:

    • 由于onShowFileSelector事件通常与<input type="file">元素相关联,你可以根据该元素的不同属性(如accept属性)来判断用户期望选择的文件类型。
    • 在事件处理函数中,检查触发事件的input元素的属性,并根据这些属性来调整文件选择器的选项或行为。

请注意,具体的API调用和事件处理逻辑可能依赖于鸿蒙系统的版本和具体的Web组件实现。

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

回到顶部