HarmonyOS 鸿蒙Next web组件onShowFileSelector事件处理,使用弹框(相机/文件按钮)或判断前端input调用类型
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代码中监听该事件,并根据需求触发相应的文件选择界面。
-
弹框实现:
- 在Web组件的JavaScript代码中,监听
onShowFileSelector
事件。 - 当事件触发时,使用鸿蒙提供的API(如
filePicker
)来显示文件选择器弹框,允许用户选择文件或拍照。
- 在Web组件的JavaScript代码中,监听
-
判断前端
input
调用类型:- 由于
onShowFileSelector
事件通常与<input type="file">
元素相关联,你可以根据该元素的不同属性(如accept
属性)来判断用户期望选择的文件类型。 - 在事件处理函数中,检查触发事件的
input
元素的属性,并根据这些属性来调整文件选择器的选项或行为。
- 由于
请注意,具体的API调用和事件处理逻辑可能依赖于鸿蒙系统的版本和具体的Web组件实现。
如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html