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

8 回复

楼主您好:

  1. 请使用真机或模拟器运行查看WebView效果,预览器不支持WebView显示。

  2. 只有预置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方法调用无效果,可能的原因及解决方案如下:

  1. WebView配置问题:确保WebView组件已正确配置并启用JavaScript支持。检查WebView的设置,确保setJavascriptEnabled(true)已被调用(尽管这是Android WebView的API,鸿蒙可能有类似的设置)。

  2. JS接口绑定:确认是否已正确将JS接口绑定到WebView。在鸿蒙系统中,可能需要通过特定的方法或接口来实现JS与原生代码的通信。

  3. 页面加载状态:检查JS方法调用是否在页面完全加载后进行。如果页面尚未加载完成,JS方法可能无法执行。

  4. 权限问题:确认应用是否有足够的权限来执行JS代码。在某些情况下,权限限制可能导致JS执行失败。

  5. JS代码错误:检查JS代码本身是否存在错误。错误的JS代码自然无法正确执行。

  6. 版本兼容性问题:确认鸿蒙系统版本与WebView组件的兼容性。不同版本的鸿蒙系统可能对WebView的支持存在差异。

如果以上检查均无误,但问题依旧存在,可能是系统级别的bug或特定环境下的特殊问题。此时,建议直接联系官网客服以获取更专业的帮助。官网地址是:https://www.itying.com/category-93-b0.html

回到顶部