火狐浏览器中的JavaScript MIME类型警告

7

我正在Django模板中加载JavaScript文件:

<script type="application/javascript" src="{% static 'online-v3.js' %}"></script>

在Chrome中,它能够正常加载。但是,在Firefox中我却收到以下警告:

The script from “http://127.0.0.1:8000/static/myscript.js” was loaded even though its MIME type (“text/plain”) is not a valid JavaScript MIME type.

我担心由于这个问题,一些浏览器可能根本不会加载JS文件。

这个问题的可能原因是什么,我该如何解决?


我在使用HTML路由器(通过.htaccess文件调用)加载.js文件时,遇到了这个警告,脚本元素中没有使用任何类型属性,但只有在Firefox上出现,而不是Chrome。这是Firefox的一个错误吗? - David Spector
4个回答

7

删除 type 属性或将其更改为 "text/javascript"

在HTML5规范中,type 属性仅在不是 JavaScript 时才需要。


text/javascript 还是 application/javascript?我都见过。 - David Spector
Mozilla表示:“注意:尽管任何给定的用户代理可能支持其中任何一个或全部,但您应该仅使用text/javascript。这是唯一保证现在和将来都能正常工作的MIME类型。” - Anthony L

4
补充evilpie的回答,对我来说根本原因是在本地测试中使用基本的py -m http.server命令。为了正确地将.js文件分配为“text/javascript” MIME类型,我改用来自Github用户HaiyangXu的此脚本。
# -*- coding: utf-8 -*-
#test on python 3.4 ,python of lower version  has different module organization.
import http.server
from http.server import HTTPServer, BaseHTTPRequestHandler
import socketserver

PORT = 8080

Handler = http.server.SimpleHTTPRequestHandler

Handler.extensions_map={
        '.manifest': 'text/cache-manifest',
    '.html': 'text/html',
        '.png': 'image/png',
    '.jpg': 'image/jpg',
    '.svg': 'image/svg+xml',
    '.css': 'text/css',
    '.js':  'application/x-javascript',
    '': 'application/octet-stream', # Default
    }

httpd = socketserver.TCPServer(("", PORT), Handler)

print("serving at port", PORT)
httpd.serve_forever()

来源:https://gist.github.com/HaiyangXu/ec88cbdce3cdbac7b8d5

2
你的服务器配置错误,使用错误的Content-Type头信息(text/plain)提供.js文件。未来Firefox可能会开始阻止MIME类型不正确的脚本。

MIME类型的原因是什么?对于常见的图像、js和css,在HTML上下文中,数据的含义是显而易见的。 - David Spector

1
为了解决Windows上Django调试服务器的警告,请在您的settings.py文件中添加以下行:
import mimetypes

mimetypes.add_type("application/javascript", ".js", True)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接