HarmonyOS鸿蒙Next中webview执行js报错

HarmonyOS鸿蒙Next中webview执行js报错 在执行js的时候,catch到一个error,应该怎么处理
错误码:17100001, 错误信息:Init error. The WebviewController must be associated with a Web component

3 回复

// index.html

<!DOCTYPE html> <html> <body>

调用原生!

这是一个测试信息,默认字体为黑色,调用runJavaScript方法后字体为绿色,调用runJavaScriptCodePassed方法后字体为红色

<script> // 调用有参函数时实现。 var param = "param: JavaScript Hello World!"; function htmlTest(param) { document.getElementById('text').style.color = 'green'; console.log(param); } // 调用无参函数时实现。 function htmlTest() { document.getElementById('text').style.color = 'green'; } // Click Me!触发前端页面callArkTS()函数执行JavaScript传递的代码。 function callArkTS() { objName.test('success'); } </script> </body> </html>

// Index.ets

// xxx.ets import { webview } from ‘@kit.ArkWeb’; import router from ‘@system.router’;

class TestObj { constructor() { }

test(data1: string) { console.log(“data1:” + data1); getContext(this).eventHub.emit(‘next’); } }

@Entry @Component struct WebComponent { webviewController: webview.WebviewController = new webview.WebviewController(); testObj = new TestObj();

aboutToAppear() { // 配置Web开启调试模式 webview.WebviewController.setWebDebuggingAccess(true); getContext(this).eventHub.on(‘myEvent’, () => this.runJS()); getContext(this).eventHub.on(‘next’, () => { router.push({ uri: ‘pages/ResultPage’ }); }); }

runJS() { console.log(‘webviewController’,this.webviewController) this.webviewController.runJavaScript(‘htmlTest(param)’); }

build() { Column() { Button(‘runJavaScript’) .onClick(() => { // 前端页面函数无参时,将param删除。 this.webviewController.runJavaScript(‘htmlTest(param)’); }) Button(‘nextPage’).onClick(() => { router.push({ uri: ‘pages/ResultPage’ }); }) Web({ src: $rawfile(‘index.html’), controller: this.webviewController }) .onControllerAttached(() => { this.webviewController.registerJavaScriptProxy(this.testObj, “objName”, [“test”]); }) } } }

// ResultPage.ets

import router from ‘@system.router’;

@Entry @Component struct ResultPage { @State message: string = ‘Hello World’;

build() { RelativeContainer() { Text(this.message) .id(‘ResultPageHelloWorld’) .fontSize(50) .fontWeight(FontWeight.Bold) .alignRules({ center: { anchor: ‘container’, align: VerticalAlign.Center }, middle: { anchor: ‘container’, align: HorizontalAlign.Center } }) .onClick(() => { // 测试原生成功返回 getContext(this).eventHub.emit(‘myEvent’); router.back(); }) } .height(‘100%’) .width(‘100%’) } }

更多关于HarmonyOS鸿蒙Next中webview执行js报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,WebView执行JavaScript报错可能涉及多个方面。首先,确保WebView已启用JavaScript支持,通过setJavaScriptEnabled(true)方法进行设置。其次,检查JavaScript代码是否存在语法错误或逻辑问题,特别是在与HarmonyOS API交互时。HarmonyOS的WebView可能不支持某些浏览器特定的API或功能,需确保代码兼容性。

另外,注意WebView的安全设置,如setAllowFileAccesssetAllowContentAccess,确保配置正确以避免权限问题导致的错误。如果使用了第三方库或框架,确认其版本与HarmonyOS兼容。

调试时,可通过setWebChromeClient设置WebChromeClient,利用onConsoleMessage方法捕获并输出控制台日志,帮助定位问题。如果问题依旧,建议检查WebView的初始化代码和相关配置,确保没有遗漏或错误。

在HarmonyOS鸿蒙Next中,WebView执行JavaScript报错可能由以下原因引起:

  1. 未启用JavaScript:确保在WebView中启用了JavaScript支持。可以通过setJavaScriptEnabled(true)来启用。

  2. 跨域问题:如果加载的页面涉及跨域请求,可能会被浏览器安全策略限制。检查页面是否允许跨域访问。

  3. JavaScript代码错误:确保执行的JavaScript代码没有语法错误或逻辑错误。可以在浏览器控制台中测试代码。

  4. WebView版本兼容性:不同版本的WebView对JavaScript的支持可能有所不同,确保使用的WebView版本与代码兼容。

  5. 权限问题:检查是否有足够的权限执行JavaScript操作,特别是在涉及敏感操作时。

建议逐步排查以上问题,确保WebView配置正确且JavaScript代码无误。

回到顶部