HarmonyOS 鸿蒙Next webview刷新的问题
HarmonyOS 鸿蒙Next webview刷新的问题
Webview 中,runJavaScriptExt() app 通过此方法调js里面的方法, js 代码 function test1() { } function test2(str) { } app调test1()是 this.controller.runJavaScriptExt(‘test1()’) 那如何调test2(), 参数如何携带,实现app调用js里面带参数的方法,麻烦告知一下
更多关于HarmonyOS 鸿蒙Next webview刷新的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
代码:
import web_webview from '[@ohos](/user/ohos).web.webview';
import business_error from '[@ohos](/user/ohos).base';
[@Entry](/user/Entry)
[@Component](/user/Component)
struct WebComponent {
controller: web_webview.WebviewController = new web_webview.WebviewController();
[@State](/user/State) msg1: string = ''
[@State](/user/State) msg2: string = ''
build() {
Column() {
Text(this.msg1).fontSize(20)
Text(this.msg2).fontSize(20)
Web({ src: $rawfile('index.html'), controller: this.controller })
.javaScriptAccess(true)
.onPageEnd(e => {
try {
this.controller.runJavaScriptExt(
"test(\"" + '哈哈' + "\")",
(error, result) => {
if (error) {
let e: business_error.BusinessError = error as business_error.BusinessError;
console.error(`run JavaScript error, ErrorCode: ${e.code}, Message: ${e.message}`)
return;
}
if (result) {
try {
let type = result.getType();
switch (type) {
case web_webview.JsMessageType.STRING: {
this.msg1 = "result type:" + typeof (result.getString());
this.msg2 = "result getString:" + ((result.getString()));
break;
}
case web_webview.JsMessageType.NUMBER: {
this.msg1 = "result type:" + typeof (result.getNumber());
this.msg2 = "result getNumber:" + ((result.getNumber()));
break;
}
case web_webview.JsMessageType.BOOLEAN: {
this.msg1 = "result type:" + typeof (result.getBoolean());
this.msg2 = "result getBoolean:" + ((result.getBoolean()));
break;
}
case web_webview.JsMessageType.ARRAY_BUFFER: {
this.msg1 = "result type:" + typeof (result.getArrayBuffer());
this.msg2 = "result getArrayBuffer byteLength:" + ((result.getArrayBuffer().byteLength));
break;
}
case web_webview.JsMessageType.ARRAY: {
this.msg1 = "result type:" + typeof (result.getArray());
this.msg2 = "result getArray:" + result.getArray();
break;
}
default: {
this.msg1 = "default break, type:" + type;
break;
}
}
}
catch (resError) {
let e: business_error.BusinessError = resError as business_error.BusinessError;
console.error(`ErrorCode: ${e.code}, Message: ${e.message}`);
}
}
});
if (e) {
console.info('url: ', e.url);
}
} catch (error) {
let e: business_error.BusinessError = error as business_error.BusinessError;
console.error(`ErrorCode: ${e.code}, Message: ${e.message}`);
}
})
}
}
}
更多关于HarmonyOS 鸿蒙Next webview刷新的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next系统中,WebView刷新问题通常与页面内容更新或WebView组件的重绘机制有关。以下是一些可能的解决方法:
-
调用
loadUrl
或loadData
方法:- 如果WebView加载的是网络页面,尝试重新调用
loadUrl
方法,传入当前URL,以强制刷新页面。 - 对于本地HTML内容,可以使用
loadData
或loadDataWithBaseURL
方法重新加载数据。
- 如果WebView加载的是网络页面,尝试重新调用
-
清除缓存:
- 在某些情况下,WebView的缓存可能导致页面内容不更新。可以通过调用
clearCache
、clearHistory
或clearFormData
等方法清除相关缓存。
- 在某些情况下,WebView的缓存可能导致页面内容不更新。可以通过调用
-
使用JavaScript刷新:
- 在WebView加载的页面中,通过JavaScript代码调用
window.location.reload()
方法刷新页面。 - 或者,在页面中设置定时器,定期刷新部分内容。
- 在WebView加载的页面中,通过JavaScript代码调用
-
检查WebView设置:
- 确保WebView的设置(如JavaScript权限、第三方Cookie等)没有阻止页面刷新。
-
版本兼容性:
- 检查当前使用的HarmonyOS版本是否支持WebView的某些特性或方法。
如果上述方法均无法解决问题,可能是系统或应用层面的深层次问题。此时,建议直接联系官网客服以获取更专业的帮助。官网地址是:https://www.itying.com/category-93-b0.html。