nuxt 引入 recoder-core,报错 window is not defind

在 nuxt 项目的 vue 文件中通过 import 引入 recorder-core

// 引入js库
import Recorder from '@/static/recorder/recorder-core'
// 引入需要使用到的音频格式编码引擎的js文件
import '@/static/recorder/engine/wav'

但是这种方法会报错:window is not defind
 

报错原因:要引入的脚本里面用到了 window,nuxt.js 会在服务端渲染页面,在 mounted 生命周期之前都是在服务器端执行,服务端并没有window 或 document


解决方法
1. 方法一:可以在 mounted 生命周期引入脚本,就可以使用window、document 等对象 

mounted() {
    require('@/static/recorder/recorder-core')
    require('/static/recorder/engine/wav')
}

2. 通过script标签引入脚本,mounted 周期时再加载 script 标签

<div v-if="loadRecorderJs">
      <recorder-core />
      <wav />
</div>
export default {
  name: 'ASRHandler',
  components: {
    'recorder-core': {
      render(createElement) {
        return createElement(
          'script',
          {
            attrs: {
              type: 'text/javascript',
              src: require('../static/recorder/recorder-core.js')
            }
          })
      }
    },
    'wav': {
      render(createElement) {
        return createElement(
          'script',
          {
            attrs: {
              type: 'text/javascript',
              src: require('@/static/recorder/engine/wav.js')
            }
          })
      }
    }
},
data() {
    return {
      loadRecorderJs: false
    }
},
mounted() {
    this.loadRecorderJs = true
}

不推荐使用第二种方法,有点麻烦

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值