美文网首页工作生活
前端踩坑记录

前端踩坑记录

作者: dawsonenjoy | 来源:发表于2019-07-02 14:18 被阅读0次

    js相关

    Failed to load module script: The server responded with a non-JavaScript MIME type of "text/plain". Strict MIME type checking is enforced for module scripts per HTML spec.
    起因

    通过script标签导入js,并指定type="module",结果发现浏览器报上面的错

    解决

    (不想看过程的可以直接跳到第四步)

    1. 查看js文件response的响应头中,Content-Type的值为text/plain; charset=utf-8(正常来说应该是application/javascript),而对于大部分浏览器来说都会对返回的mime类型进行校验,因此无法正确解析(部分浏览器中可能不会有这种错,例如:edge
    2. 而由于后台是通过flask编写的,于是认为是服务端对静态文件返回的响应头类型有问题,而追根溯源,发现响应头的内容类型是通过mimetypes模块来获取的
    3. mimetypes默认的配置里.js的类型是application/javascript,但是使用时被改成了text/plain,而该值实际上是从注册表中获取的
    4. redegit命令打开注册表,查看HKEY_CLASSES_ROOT->.js,发现里面有一个Content-Type的配置,如图:
    5. 将该配置删掉即可
    总结原因

    注册表内.jsContent-Type覆盖了默认的,删掉即可,该方法适用于部分响应头的Content-Type返回不正确的情况

    html事件参数空格问题

    例如下面代码:

    <style>
    </style>
    <body>
    </body>
    <script>
      function test(a, b) {
        console.log(a, b);
      }
      let div1 = document.createElement("div");
      // 动态生成的标签的事件参数间不能加空格,否则解析会出问题(空格会被当做属性的分隔符)
      // 即被解析成:onclick=test("x1",和"y1")两个字段
      div1.innerHTML = `<button onclick=test("x1", "y1")>div1</button>`;
      let div2 = document.createElement("div");
      div2.innerHTML = `<button onclick=test("x2","y2")>div2</button>`;
      document.body.appendChild(div1);
      document.body.appendChild(div2);
    </script>
    

    可以发现div1按钮点击报错,而div2点击能正常运行,就是因为div1test函数的参数间存在空格,而浏览器在解析时,会将空格当做属性的分隔符,结果导致解析错误

    • 解决:不要留空格即可

    相关文章

      网友评论

        本文标题:前端踩坑记录

        本文链接:https://www.haomeiwen.com/subject/sumzcctx.html