uniapp evaljs is not a function 错误如何解决

在uniapp开发中,调用evalJS方法时出现"evaljs is not a function"错误,请问该如何解决?这个错误通常出现在调用webview的evalJS方法时,但在uniapp中似乎无法直接使用。有没有替代方案或正确的调用方式?希望有经验的朋友能帮忙解答一下。

2 回复

在uni-app中,evalJS方法已废弃,请改用$vm调用页面方法。例如:this.$vm.xxx()


在 UniApp 中遇到 evaljs is not a function 错误,通常是因为在 H5 或小程序环境中错误使用了 evalJS 方法。以下是解决方案:

1. 确认运行环境

  • evalJS 是 WebView 特有的方法,仅适用于 web-view 组件内嵌的网页与 UniApp 页面之间的通信。
  • 在普通页面、小程序或非 WebView 环境中调用会导致此错误。

2. 检查代码调用位置

  • 错误示例:在非 WebView 上下文(如普通 Vue 页面)中调用:
    // 错误:在普通页面中调用 evalJS
    uni.evalJS('alert("Hello")'); // 报错:evaljs is not a function
    
  • 正确用法:仅在 web-view 组件的页面中,通过 uni 对象调用:
    // 正确:在包含 web-view 的页面中调用
    // 假设通过 web-view 的 @message 事件接收消息后执行
    methods: {
      handleMessage(e) {
        // e.detail.data 来自 web-view 内网页的 postMessage
        const jsCode = e.detail.data.jsCode;
        this.$refs.webview.evalJS(jsCode); // 通过 web-view 组件引用调用
      }
    }
    

3. 替代方案

  • 如果需要在普通页面执行动态 JavaScript,请改用以下方法:
    • H5 环境:使用 eval() 函数(注意安全风险,避免执行不可信代码)。
      eval('console.log("Dynamic code")');
      
    • 小程序环境:通过 wx.evaluateScript(仅限特定平台,需检查兼容性)或设计安全的数据交互逻辑。

4. 排查步骤

  1. 确认代码是否在 web-view 关联的页面中运行。
  2. 检查 web-view 组件是否正确引用:
 ```html
 <web-view ref="webview" src="https://example.com" @message="handleMessage"></web-view>
 ```
  1. 验证 UniApp 版本,更新到最新稳定版以避免已知兼容性问题。

总结

  • 根本原因:在非 WebView 环境错误调用 evalJS
  • 解决重点:确保仅通过 web-view 组件引用调用该方法,或根据实际环境使用替代方案。
回到顶部