生活[吐槽] 有道居然在Linux下的chrome中出错了???

2023年 8月 18日 20.3k 0

我本想通过有道翻译一些句子,没想到上来就不显示,我还以为是兼容性有问题呢,一看控制台居然报错了
image.png
image.png
根据打印的信息来看是个空指针异常

image.png

分析该调用栈,它是向获取一个组件的emitOptions,这个函数是vue3.0的事件声明方式,而且下面属性的监听使用的也都是Proxy

image.png
上述代码确实不足以报错,又调试了第二遍,发现t.component在第二次执行的时候会变为空值,而这就引发了null.emitsOptions,必然是报错的。

image.png

为什么是第二遍才报错呢

我们看首图可知,翻译框是由两部分组成分别是左侧原文和右侧译文,那么我们走第一遍时处理的就是左侧原文,而进行第二次处理时,走的的就右侧,但是右侧的数据还没加载完毕导致获取这个组件的时候还没生成或进行了其它判断,导致组件的初始化异常或执行异常(以上纯属个人猜测)

这个t是什么呢

image.png

查看调用栈,t表示的是一个虚拟dom,是一个叫做VoicePlayer的组件,根据翻译表示的是语音播放器。看来又是哪位大神写的了。

如果想继续排查我们需要返回到父节点

组件获取不到大概率也是父组件的问题。使用 t.ctx.parent可以获取父节点信息。父节点是一个文本组件,叫做TextTranslate

image.png

父节点包含了 VoicePlayer组件,看着还行,估计使用的是options+setup的混合写法。

image.png

这是该组件的setup函数

image.png

未完待续。。。

根据这篇博客分析CSDN博主,可能存在的原因有三种

分别是

情景 解释 解决方案
① v-if 导致 在 v-if 值为 false 时,如果操作了 v-if 控制的 DOM,可能会因为该 DOM 元素不存在而报错。 v-show 替换 v-if
② el-dialog 组件导致 默认弹框是关闭的,DOM中没有弹框中的内容。打开弹框再关闭后,弹框中的 DOM 元素没有被销毁,可能会因为不该存在的 DOM 元素而报错(我的报错就是由此导致)。 给 el-dialog 组件增加 destroy-on-close 属性
③ el-table 组件导致 el-table-column渲染时报错,若 scope.row.xx(xx为任意字段值)不存在,对其直接执行 length、toString() 等方法而报错。 scope.row.xx?.length

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论