HarmonyOS 鸿蒙Next webview刷新的问题

发布于 1周前 作者 wuwangju 来自 鸿蒙OS

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组件的重绘机制有关。以下是一些可能的解决方法:

  1. 调用loadUrlloadData方法

    • 如果WebView加载的是网络页面,尝试重新调用loadUrl方法,传入当前URL,以强制刷新页面。
    • 对于本地HTML内容,可以使用loadDataloadDataWithBaseURL方法重新加载数据。
  2. 清除缓存

    • 在某些情况下,WebView的缓存可能导致页面内容不更新。可以通过调用clearCacheclearHistoryclearFormData等方法清除相关缓存。
  3. 使用JavaScript刷新

    • 在WebView加载的页面中,通过JavaScript代码调用window.location.reload()方法刷新页面。
    • 或者,在页面中设置定时器,定期刷新部分内容。
  4. 检查WebView设置

    • 确保WebView的设置(如JavaScript权限、第三方Cookie等)没有阻止页面刷新。
  5. 版本兼容性

    • 检查当前使用的HarmonyOS版本是否支持WebView的某些特性或方法。

如果上述方法均无法解决问题,可能是系统或应用层面的深层次问题。此时,建议直接联系官网客服以获取更专业的帮助。官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部