HarmonyOS鸿蒙Next中js调用原生方法报错

HarmonyOS鸿蒙Next中js调用原生方法报错

有没有大神可以帮忙看一下,使用WebView加载h5,网页上有一个返回按钮,想调用原生方法逻辑报错了,报错内容:“TypeError: sptcc.finishThisPage is not a function”

.javaScriptProxy({
    object: {
        finishThisPage: (): void => finishThisPage()
    },
    name: 'sptcc',
    methodList: ['finishThisPage'],
    controller: this.controller
})

function finishThisPage(){
    router.back();
}

更多关于HarmonyOS鸿蒙Next中js调用原生方法报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

您好,为了更快速解决您的问题,并且吸引更多用户一同参与您问题的解答与讨论,建议您补全如下信息:

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


同问,没代码,有点不太好复现,

javaScriptProxy的object参数 需要传入一个类的shi’li,可以参考示例写法

https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-web#javascriptproxy

在HarmonyOS鸿蒙Next中,JS调用原生方法报错可能由以下原因导致:

  1. 原生方法未在ets文件中正确定义或导出
  2. JS与Native侧接口签名不匹配(参数类型/数量不一致)
  3. 未在module.json5中正确配置Native能力依赖
  4. 跨线程调用未使用Propery或MethodSync装饰器

典型错误包括:

  • “Method not found”:检查方法名大小写及导出状态
  • “Parameter type mismatch”:确认TS/ETS类型映射正确
  • “Calling thread violation”:主线程不能直接调用耗时Native方法

需检查:

  1. @ExposeToJS装饰器使用
  2. 方法参数使用ArkTS声明类型
  3. 同步/异步调用方式选择,

在HarmonyOS Next中,WebView与JS交互出现"TypeError: sptcc.finishThisPage is not a function"错误,通常是由于JS桥接配置不正确导致的。以下是可能的原因和解决方案:

  1. 确保WebView已正确初始化并启用了JS交互:
webviewController.javaScriptProxy({
  object: {
    finishThisPage: () => finishThisPage()
  },
  name: 'sptcc',
  methodList: ['finishThisPage'],
  controller: this.controller
})
  1. 检查WebView的JS接口注入时机,确保在页面加载完成后再调用JS方法。可以在onPageEnd回调中注入:
webviewController.setOnPageEnd(() => {
  // 注入JS接口
})
  1. 确保H5页面中调用的是正确的对象名和方法名:
// H5中应这样调用
if(window.sptcc && sptcc.finishThisPage) {
  sptcc.finishThisPage();
}
  1. 检查路由对象router是否正确初始化,finishThisPage方法实现应为:
function finishThisPage() {
  router.back();
}
  1. 如果问题仍然存在,可以尝试在WebView初始化时添加调试日志,确认JS代理是否成功注入。
回到顶部