nuxt.js中 window is not defined??? 怎么解决????

clipboard.png
nuxt官网api给出这样的结论 表示看不太懂

clipboard.png

阅读 11k
3 个回答

nuxtjs作为一个服务端渲染的库,代码应该在node环境执行,浏览器的执行环境和node的执行环境是有差异的,node上是没有window或document这样的对象,所以会报错。

解决的办法有两种思路:

假如没有该对象或方法,可以用一个空对象或方法填充:

if (!window) { window = {}; }
if (!window.localStorage) { window.localStorage = {}; }
if (!window.localStorage.getItem) { window.localStorage.getItem = function() {} }

或者干脆不执行,跳过这段代码

if (window) {
    window.localStorage.getItem('uid')
}

最终生成的代码会保留源代码,这些代码在浏览端是能够正常运行的,只是在node上会被忽略。

我的代码是在js文件中 下面是我的js文件,我怎么改??

import commons from '~/utils/common.js'
import hopaction from '~/models/hop_action.js'
// 设备注册
const uidstr = window.localStorage.getItem('uid')
const eqpmdidstr = window.localStorage.getItem('equipmentuid')
const uuidstr = window.localStorage.getItem('uuid')
const deviceid = commons.deviceid(19, 16) + new Date().getTime()
if (!commons.isnull(uuidstr)) {
window.localStorage.setItem('uuid', deviceid)
}
const deviceidinfo = {
'os': 'm3',
'brand': 'm3',
'model': 'm3'
}
function equipment () {
if (!commons.isnull(eqpmdidstr)) {

hopaction.page({'channel': 'm3', 'platform': '99', 'deviceid': deviceid, 'device_info': JSON.stringify(deviceidinfo)}, 'platform.passport.register_by_device', data => {
  window.localStorage.setItem('equipmentuid', data.uid)
  window.localStorage.setItem('uid', data.uid)
  console.log(data)
}, data => {
  console.log('失败')
})

}
}
function equiregis () {
if (!commons.isnull(uidstr)) {

equipment()

} else {

equipment()

}
}

export default {
equiregis
}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题