HarmonyOS 鸿蒙Next 使用webview加载url时,如何注入两个javascript对象?

发布于 1周前 作者 yuanlaile 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 使用webview加载url时,如何注入两个javascript对象?

使用webview加载url时,如何注入两个javascript对象?
查阅文档时,只看到如下的注入javaScriptProxy对象的方法,我有两个对象需要注入,一个名字是app,一个是AndroidJs。如何实现?
Web({ src: this.url, controller: this.webviewController })
.javaScriptAccess(true)
.fileAccess(true)
.domStorageAccess(true)
.javaScriptProxy({
object: this.mpmJavaScriptProxy,
name: MpmJavaScriptProxy.javaScriptProxyName,
methodList: MpmJavaScriptProxy.methodList,
controller: this.webviewController
}) 
 


更多关于HarmonyOS 鸿蒙Next 使用webview加载url时,如何注入两个javascript对象?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

HarmonyOS 鸿蒙Next 使用webview加载url时,如何注入两个javascript对象 可以参考下面代码

// xxx.ets
import web_webview from '@ohos.web.webview';
import business_error from '@ohos.base';

class TestObj {
  constructor() {
  }

  test(testStr:string): string {
    console.log('Web Component str' + testStr);
    return testStr;
  }

  toString(): void {
    console.log('Web Component toString');
  }

  testNumber(testNum:number): number {
    console.log('Web Component number' + testNum);
    return testNum;
  }

  testBool(testBol:boolean): boolean {
    console.log('Web Component boolean' + testBol);
    return testBol;
  }
}

class WebObj {
  constructor() {
  }

  webTest(): string {
    console.log('Web test');
    return "Web test";
  }

  webString(): void {
    console.log('Web test toString');
  }
}

@Entry
@Component
struct Index {
  controller: web_webview.WebviewController = new web_webview.WebviewController();
  @State testObjtest: TestObj = new TestObj();
  @State webTestObj: WebObj = new WebObj();
  build() {
    Column() {
      Button('refresh')
        .onClick(() => {
          try {
            this.controller.refresh();
          } catch (error) {
            let e: business_error.BusinessError = error as business_error.BusinessError;
            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
          }
        })
      Button('Register JavaScript To Window')
        .onClick(() => {
          try {
            this.controller.registerJavaScriptProxy(this.testObjtest, "objName", ["test", "toString", "testNumber", "testBool"]);
            this.controller.registerJavaScriptProxy(this.webTestObj, "objTestName", ["webTest", "webString"]);
          } catch (error) {
            let e: business_error.BusinessError = error as business_error.BusinessError;
            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
          }
        })
      Web({ src: $rawfile('index.html'), controller: this.controller })
        .javaScriptAccess(true)
    }
  }
}

更多关于HarmonyOS 鸿蒙Next 使用webview加载url时,如何注入两个javascript对象?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,使用webview加载URL并注入JavaScript对象,可以通过以下步骤实现:

  1. 配置Webview: 确保你的webview组件已正确配置,并加载了目标URL。

  2. 准备JavaScript对象: 在JavaScript中定义两个对象,或者使用JSON字符串表示对象,再通过Java(鸿蒙系统使用ArkUI的ETS或Java UI框架)代码将这些对象传递给webview。

  3. 注入对象: 利用鸿蒙提供的webview接口,通过evaluateJavascript方法将JavaScript对象注入到webview的上下文中。需要注意的是,由于直接传递对象较为复杂,一般选择将对象转换为JSON字符串,然后在webview中解析为对象。

示例代码:

// 假设这是要在webview中使用的JavaScript代码
let obj1 = JSON.parse('{"key1":"value1"}');
let obj2 = JSON.parse('{"key2":"value2"}');

在鸿蒙的Java(ArkUI)代码中:

webview.evaluateJavascript("let obj1 = JSON.parse('{\"key1\":\"value1\"}'); let obj2 = JSON.parse('{\"key2\":\"value2\"}');", null);

以上代码将两个JavaScript对象注入到webview中。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部