focusControl.requestFocus获取焦点的问题

​在Button的click事件中调用focusControl.requestFocus之后可以成功获取InputText的焦点并调起软键盘,但是通过JSBridge却无法正常获取焦点。

在页面中有WebView和InputText两个控件,InputText设置key(“test”),然后点击Webview中的H5标签并调用了原生暴露的JSAPI(JSAPI是通过Web组件的webviewController.registerJavaScriptProxy来实现的),在JSAPI中调用了Page传入的箭头函数,箭头函数定义在了page的aboutToAppear中,然后在箭头函数内调用focusControl.requestFocus(“test”)后并没有获取焦点,返回值也是false,但是在y原生Button的click事件中调用focusControl.requestFocus(“test”)却可以成功获取InputText的焦点并调起软键盘。这个问题应该如何解决呢?我们有很多场景需要通过调用JsAPI来获取焦点。​

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

本地使用默认聚焦是可以在web页面获得软键盘,demo如下:

import webview from '@ohos.web.webview' 
 
export interface JsbObject { 
  openDialog: () => void 
} 
 
@Entry() 
@Component 
struct focus_Controller { 
  webviewController = new webview.WebviewController() 
  dialogController: CustomDialogController = new CustomDialogController({ 
    builder: CustomDialogExample({}) 
  }) 
  jsbObject: JsbObject = { 
    openDialog: () => { 
      this.showDialog(this) 
    } 
  } 
 
  showDialog(context: object) { 
    // 自定义弹窗调出来 
    this.dialogController.open() 
  } 
 
  build() { 
    Column() { 
 
      Button("点我") 
        .onClick(() => { 
          this.showDialog(this) 
          console.info("sss") 
        }) 
 
      Web({ 
        src: "resource://rawfile/web_test.html", 
        controller: this.webviewController 
      }) 
        .javaScriptAccess(true) 
        .javaScriptProxy({ 
          name: "myJsb", 
          object: this.jsbObject, 
          methodList: ["openDialog"], 
          controller: this.webviewController 
 
        }) 
    }.width('40%') 
    .height('60%') 
    .margin({ 
      left: '30%', 
      top: '20%' 
    }) 
    .backgroundColor(Color.Brown) 
  } 
} 
 
@CustomDialog 
struct CustomDialogExample { 
  dialogControllerTwo: CustomDialogController | null = new CustomDialogController({ 
    builder: CustomDialogExample(), 
    alignment: DialogAlignment.Bottom, 
    offset: { dx: 0, dy: -25 }, 
    backgroundColor: Color.Pink 
  }) 
  controller?: CustomDialogController 
 
  build() { 
    Row() { 
      TextInput({ 
        placeholder: 'wait input...', 
        text: '', 
      }) 
        .id("textInput") 
        .defaultFocus(true) 
    } 
    .height('40%') 
  } 
}
分享
微博
QQ
微信
回复
1天前
相关问题
如何判断音频焦点获取和丢失?
6049浏览 • 1回复 待解决
HarmonyOS TextInput焦点问题
269浏览 • 1回复 待解决
TextInput组件获取焦点几种场景
2368浏览 • 1回复 待解决
HarmonyOS 主动获取焦点失败
184浏览 • 1回复 待解决
HarmonyOS TextInput无法取消焦点
160浏览 • 1回复 待解决
customDialog焦点透传
721浏览 • 1回复 待解决
TextInput如何取消自动获得焦点
411浏览 • 1回复 待解决
如何监听TextInput是否获得焦点
1735浏览 • 1回复 待解决
对于获取权限api问题
1688浏览 • 1回复 待解决
HarmonyOS TextInput 取消默认焦点
359浏览 • 1回复 待解决