HarmonyOS 鸿蒙Next webview中的页面的js方法调用无效果
HarmonyOS 鸿蒙Next webview中的页面的js方法调用无效果 预期效果应该是页面接收到app中的用户信息并回显到页面上,但是页面无效果
webview中无法调用页面的JS方法,看了之前的有关webview帖子,
尝试在onPageLoaded中调用webview.addJsCallback方法,在js回调方法中执行webView.executeJs方法,代码如下:
public void onPageLoaded(WebView webview, String url) {
super.onPageLoaded(webview, url);
// 页面加载结束后自定义处理
webView.addJsCallback(ui,new JsCallback(){
public String onCallback(String msg){
JSONOBJECT jsonObject;
/*new ToastDialog(getContext())
.setText(msg)
.show();*/
try {
jsonObject = new JSONOBJECT(msg);
String callback = jsonObject.optString("callback");
JSONOBJECT jsonCallBackObj = new JSONOBJECT();
jsonCallBackObj.put("name",userinfo.get("name"));
jsonCallBackObj.put("gender","M");
webView.executeJs(callback + "(" + jsonCallBackObj + ")",null);
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
});
}
控制台log:
05-15 11:27:40.370 25160-25160/com.pan.healthcode_ui W HwRemoteInputMethodManager: isCasting false because IHwDistributedWindowManager is invalid.
05-15 11:27:40.378 25160-25952/com.pan.healthcode_ui W WebView : java.lang.Throwable: A WebView method was called on thread 'JavaBridge'. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 1) {da099ab} called on Looper (JavaBridge, tid 8306) {bc97ba4}, FYI main Looper is Looper (main, tid 1) {da099ab})
05-15 11:27:40.378 25160-25952/com.pan.healthcode_ui W WebView : at android.webkit.WebView.checkThread(WebView.java:2607)
05-15 11:27:40.378 25160-25952/com.pan.healthcode_ui W WebView : at android.webkit.WebView.evaluateJavascript(WebView.java:914)
05-15 11:27:40.378 25160-25952/com.pan.healthcode_ui W WebView : at ohos.agp.components.webengine.adapter.WebViewBridge.O000000(WebViewBridge.java:366)
05-15 11:27:40.378 25160-25952/com.pan.healthcode_ui W WebView : at ohos.agp.components.webengine.WebView.executeJs(WebView.java:291)
05-15 11:27:40.378 25160-25952/com.pan.healthcode_ui W WebView : at com.pan.M_Healthcode.slice.MainPageSlice$1$2.onCallback(MainPageSlice.java:110)
更多关于HarmonyOS 鸿蒙Next webview中的页面的js方法调用无效果的实战教程也可以访问 https://www.itying.com/category-93-b0.html
楼主您好:
-
请使用真机或模拟器运行查看WebView效果,预览器不支持WebView显示。
-
只有预置WebView能力的真机设备才支持WebView功能。具体请以实际设备支持情况为准。智能穿戴设备不支持WebView。
WebView相关开发代码可以参考Codelabs:
https://developer.huawei.com/consumer/cn/codelabsPortal/carddetails/HarmonyOS-WebView
更多关于HarmonyOS 鸿蒙Next webview中的页面的js方法调用无效果的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
楼主可以试试4楼的方法。
1. webview.executeJs 我也无法调用网页JS,可以调用本地(resources/rawfile/test.html)JS
2. 我现在的做法, js调用java; java webView.addJsCallback 里直接return 给js 处理
function sendData() {
// alert("sendData...")
if (window.JsCallbackToApp && window.JsCallbackToApp.call) {
// Web页面调用应用
var rst = window.JsCallbackToApp.call("这个是来自本地Web页面的消息");
alert("java回调返回信息 " + rst)
} else {
alert('发送消息给WebviewSlice失败');
}
}
// js回调java
final String jsName = "JsCallbackToApp";
customWebView.addJsCallback(jsName, new JsCallback() {
@Override
public String onCallback(String msg) {
// 增加自定义处理
LogUtil.error(TAG, "addJsCallback.onCallback " + msg);
// 返回给JavaScript
return "Js Call Java Success";
}
});
这边直接使用webview.load是能正常加载页面的
webView.addJsCallback也能正常被服务器端调用,就是在回调函数String onCallback中执行webview.executeJs无法正常调用服务器端的js函数
我看教程都是本地网页,没有实际网页的教程
有没有大神帮帮忙o(╥﹏╥)o
我调用本地可以,网页版的也没成功,
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17
欢迎开发小伙伴们进来帮帮楼主
在HarmonyOS(鸿蒙)系统中,如果Next webview中的页面JS方法调用无效果,可能的原因及解决方案如下:
-
WebView配置问题:确保WebView组件已正确配置并启用JavaScript支持。检查WebView的设置,确保
setJavascriptEnabled(true)
已被调用(尽管这是Android WebView的API,鸿蒙可能有类似的设置)。 -
JS接口绑定:确认是否已正确将JS接口绑定到WebView。在鸿蒙系统中,可能需要通过特定的方法或接口来实现JS与原生代码的通信。
-
页面加载状态:检查JS方法调用是否在页面完全加载后进行。如果页面尚未加载完成,JS方法可能无法执行。
-
权限问题:确认应用是否有足够的权限来执行JS代码。在某些情况下,权限限制可能导致JS执行失败。
-
JS代码错误:检查JS代码本身是否存在错误。错误的JS代码自然无法正确执行。
-
版本兼容性问题:确认鸿蒙系统版本与WebView组件的兼容性。不同版本的鸿蒙系统可能对WebView的支持存在差异。
如果以上检查均无误,但问题依旧存在,可能是系统级别的bug或特定环境下的特殊问题。此时,建议直接联系官网客服以获取更专业的帮助。官网地址是:https://www.itying.com/category-93-b0.html