为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript 类型模块不执行

JavaScript 类型模块不执行

ibeautiful 2022-06-05 10:34:03
我有以下html文件:<!DOCTYPE html> <html> <head> </head> <body>     <script type="module">        console.log("test");    </script></body></html>但是,控制台不会打印任何内容。如果我删除type="module",它工作得很好。我使用的 Chrome 版本是 58.0.3029.81。我还搜索并测试了我当前的 Chrome 是否支持 ES6。知道为什么吗?
查看完整描述

1 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

版本 58 不支持它。https://caniuse.com/#search=type%3D%22module%22

但是你可以使用nomodule来兼容它。

nomodule 属性是一个布尔属性,可防止脚本在支持模块脚本的用户代理中执行。这允许有选择地执行现代用户代理中的模块脚本和旧用户代理中的经典脚本,如下所示。nomodule 属性不能在模块脚本上指定(如果是,将被忽略)。

这是html.spec.whatwg.org的示例

这个例子展示了如何为现代用户代理包含一个模块脚本,为旧用户代理包含一个经典脚本:

<script type="module" src="app.mjs"></script>
<script nomodule defer src="classic-app-bundle.js"></script>

在支持模块脚本的现代用户代理中,具有 nomodule 属性的 script 元素将被忽略,具有“模块”类型的脚本元素将被获取并评估(作为模块脚本)。相反,较旧的用户代理将忽略具有“模块”类型的脚本元素,因为这对他们来说是未知的脚本类型——但他们将毫无问题地获取和评估其他脚本元素(作为经典脚本),因为他们不要实现 nomodule 属性。

这意味着高于版本 61type=module并且nomodule受支持,则:

  1. 该脚本将在“模块”类型的脚本元素中执行。

  2. 该脚本不会在属性为“nomodule”的脚本元素中执行。

并且在低于 60 版本type=modulenomodule不受支持的情况下,则:

  1. 该脚本不会在类型为“模块”的脚本元素中执行,因为type=module它是浏览器的未知脚本类型。

  2. 该脚本将在具有“nomodule”属性的脚本元素中执行,因为浏览器没有实现“nomodule”属性。

希望能帮到你。


查看完整回答
反对 回复 2022-06-05
  • 1 回答
  • 0 关注
  • 259 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信