【问题标题】:How can I make JavaScript modules work in IE 11如何使 JavaScript 模块在 IE 11 中工作
【发布时间】:2020-11-29 15:50:49
【问题描述】:

我有 JavaScript modules,我想在 IE11 中使用它。

在 HTML 页面中,它们是这样引用的:

<script type="module">
     import * as mystuff from './scripts/mystuff.js'; window.mystuff = mystuff
</script>

它们在 Internet Explorer 11 中不起作用,但我无法将模块更改为普通脚本(因为它们是由 Transcrypt 生成的)。我怎样才能让它们与 IE 一起工作? &lt;script type="module"&gt; 结构是否存在 polyfill 或类似的东西?

【问题讨论】:

  • 它可能会发生冲突,但您可以考虑将所有脚本合并到单个页面
  • @hosseinsedighian 你的意思是使用捆绑器?不能这样做:我们的项目是一个遗留项目,JavaScript 源代码需要保持原样。但如果可能的话,我可以添加一个将模块功能移植到 IE 的脚本。
  • 在您之前的评论中,您提到可以添加一个脚本,将模块功能移植到 IE。我建议尝试使用JS代码来识别IE浏览器并尝试加载脚本。如果浏览器不同,那么您可以运行正常代码。这种方法可以帮助解决 IE 浏览器的问题。你可以尝试参考这个example。让我们知道建议的方法是否适合您。
  • 感谢@Deepak-MSFT 的参与!确定我是否在 IE 中是不够的:我需要以某种方式将模块 convert 转换为脚本。到目前为止我尝试了 rollup.js,但没有成功,因为 document 全局变量在汇总代码中似乎不正确。
  • 在我的搜索结果中,我找到了ES Module Loader Polyfill。您可以尝试检查和测试它可能会帮助您加载脚本。

标签: javascript internet-explorer module internet-explorer-11 transcrypt


【解决方案1】:

你不能这样做。 IE 不理解type="module" 属性。

改为使用 rollup.jsBabel 将您的模块捆绑到旧式脚本 mystuff_incl_ie.js 并使用普通脚本标签加载它:

<script src='./scripts/mystuff_incl_ie.js'></script>

另见Bundle JS with rollup and Babel for use in IE11

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 2013-09-23
    • 2015-09-23
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多