解决浏览器端 globalThis is not defined 报错

11,453 阅读1分钟

场景:

最近在使用 nuxt.js 做服务端渲染的移动端应用时,我们在app里引用h5的页面。结果上线后在部分机型(例如:Mozilla/5.0 (Linux; Android 8.1.0; M1822 Build/OPM1.171019.026; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/65.0.3325.110 Mobile Safari/537.36)里页面基本结构能加载出来但是页面不会发起其他网络请求。用 vConsole 调试也看不到报错,最后安卓开发同事调试才发现报错。如下图:

c16dac7b65cde29783a83fa58e35dade.png

解决办法:

在html头部加上如下代码:

<head>
    <script>
        this.globalThis || (this.globalThis = this)
    </script>
    ...
</head>

思路是:既然全局上没有定义 globalThis 那我们就判断一下,如果没有的情况下,定义全局的一个 globalThis 指向全局 this 对象(也就是 window 对象)。(注:支持 globalThis 的浏览器,其指向就是 window 对象,更多信息可在这里查看:developer.mozilla.org/en-US/docs/…

关键词:globalThis is not defined, nuxt.js, globalThis