syn*_*zer 5 javascript safari module global-variables
我一直在 Chrome 和 Firefox 中开发程序,但我注意到在 Safari 中加载时,我会在控制台中收到错误消息,表明某些变量不可用。我的 index.html 中有几个模块脚本标签,而其余的是常规脚本标签。
我的第一个问题是模块和脚本是否以未定义的顺序加载,这可能会导致部分问题。
我注意到的第二件事:在我的代码中,我在常规脚本中使用了老式样式模式:
const NAMESPACE = (function() { const out = {}; ... return out; }());
Run Code Online (Sandbox Code Playgroud)
在 Chrome 和 Firefox 中,这很好,但在 Safari 中看起来我需要这样做:
window.NAMESPACE = (function() { const out = {}; ... return out; }());
Run Code Online (Sandbox Code Playgroud)
或者控制台在其他文件中报告错误,指出该变量未在其他文件中声明。甚至对于全局作用域函数和类也是如此!
我的第二个问题是:为什么会这样?有没有办法解决这个问题?错误是否只会因为我试图从模块访问变量而发生,并且如果您从模块加载,Safari 的 JavaScript 引擎不会将全局对象暴露给全局范围?不知何故,我对此表示怀疑,因为即使两个非模块脚本尝试访问全局范围对象,问题仍然存在。
解决问题的最简单方法是什么?某些第三方脚本不能是模块。如果问题的一部分是加载顺序,我如何确保在另一个脚本可用之前不会加载脚本?我的想法是使用动态导入。
| 归档时间: |
|
| 查看次数: |
310 次 |
| 最近记录: |