Web中WebviewController的runJavaScript怎么带参数? HarmonyOS 鸿蒙Next

Web中WebviewController的runJavaScript怎么带参数? HarmonyOS 鸿蒙Next 【设备信息】Mate60

【API版本】Api13

【DevEco Studio版本】5.0.7.200

【问题描述】

我的h5代码有一个function syncLoginStatus(token) 方法

this.controller.runJavaScript(`syncLoginStatus('${Helper.getStatus()}')`)

我这样写对吗,好像没有作用

2 回复

runjavaScript这个接口会存在字符串转义的问题,传的字符串需转换成base64传递,h5端解base64再给h5调用者, 现在不支持传递对象,支持传递结构体,若需要传递对象可参考如下demo:

Web({ src: $rawfile('xxx.html'), controller: this.controller })
  .javaScriptAccess(true)
  .domStorageAccess(true)
  .onShowFileSelector((event) => {
    console.log('MyFileUploader onShowFileSelector invoked')
    const photoSelectOptions = new picker.PhotoSelectOptions();
    photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_VIDEO_TYPE;
    photoSelectOptions.maxSelectNumber = 8;
    const photoViewPicker = new picker.PhotoViewPicker();
    photoViewPicker.select(photoSelectOptions).then((photoSelectResult: picker.PhotoSelectResult) => {
      this.uris = photoSelectResult.photoUris;
      let file1 = fs.openSync(this.uris[0])
      let array: ArrayBuffer = new ArrayBuffer(fs.statSync(file1.fd).size)
      fs.readSync(file1.fd, array)
      let unit = new Uint8Array(array)
      let base64 = new util.Base64Helper();
      let mystr = base64.encodeToStringSync(unit);
      this.base64Str = "myFunction(\"" + mystr + "\")"
      this.controller.runJavaScript(this.base64Str)
      console.info('photoViewPicker.select to file succeed and uris are:' + this.uris);
    }).catch((err: BusinessError) => {
      console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
    })
    return false
  })

更多关于Web中WebviewController的runJavaScript怎么带参数? HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙系统中,WebviewControllerrunJavaScript 方法用于在WebView中执行JavaScript代码。如果需要传递参数到JavaScript代码中,可以通过字符串拼接的方式将参数嵌入到JavaScript代码中。

例如,假设你有一个参数 param,你可以这样使用 runJavaScript

let param = "Hello, World!";
let jsCode = `console.log('${param}');`;
webviewController.runJavaScript(jsCode);

在这个例子中,param 被嵌入到JavaScript代码中,并在WebView中执行,输出 Hello, World! 到控制台。

如果参数是复杂对象,可以先将对象序列化为JSON字符串,再嵌入到JavaScript代码中:

let param = { key: "value" };
let jsonParam = JSON.stringify(param);
let jsCode = `console.log(JSON.parse('${jsonParam}'));`;
webviewController.runJavaScript(jsCode);

这样,JavaScript代码会接收到一个对象,并输出 { key: "value" } 到控制台。

注意,runJavaScript 方法执行的是字符串形式的JavaScript代码,因此需要确保参数正确地嵌入到代码中,避免语法错误或安全风险。

回到顶部