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()}')`)
我这样写对吗,好像没有作用
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
在鸿蒙系统中,WebviewController
的 runJavaScript
方法用于在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代码,因此需要确保参数正确地嵌入到代码中,避免语法错误或安全风险。