如何防止不同 .js 文件中对象和函数名称之间的冲突

How do I prevent conflict between object and function names in different .js files

我刚刚向我的站点添加了 google 分析。大约 25% 的加载时间,我从 google 分析文件中收到以下错误:

Uncaught TypeError: a.slice is not a function

我认为这是站点上两个 .js 文件中对象和函数之间的命名干扰,google analytics js 文件,我不确定其他文件是什么。当我在 google 分析文件中添加断点时,我可以看到当错误发生时,a 正在引用另一个文件中的对象。它出现在调试器的 scope>local 下,并表示它是来自 page.js 的对象。我已经检查了该文件并确保没有以该文件命名的对象或函数。我相信它实际上来自我正在使用的 leaflet.js。这似乎是一个竞争条件,即先加载哪个名称。如果首先加载分析文件,一切正常,一切正常,否则我会收到错误消息。

我无法更改传单文件,我无法控制这两个文件。有什么方法可以防止两个文件之间发生冲突吗?

嗯...这不是一个优雅的解决方案,但您可以在分析加载后强制加载传单。

还在。 Whosebug 使用分析,但我没有看到声明的全局 a 对象。而且我已经使用分析工作了一段时间,但从未见过它声明像 a 这样模棱两可的东西。在全局范围内有类似 a 的东西让我想起了在全局范围内缩小的、未封闭的代码。这可能是你的问题。

这可能来自 GTM,如果传单是通过它部署的。

总之,你调试不够。尝试阻止对某些 JS 文件的请求,以准确找出导致竞争条件的库。还要确保 GTM 不是这里的情况,因为它经常发生在那里,因为人们倾向于部署未封闭但缩小代码的自定义 html 标签。正是造成这种情况。