这很奇怪。我设计了一个极简网页http://localhost/Default.htm在演示错误的 Windows 10 IIS 服务器上。
<!DOCTYPE html>
<html>
<head>
<script src="script.js"></script>
<link href="script.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<script>
document.writeln("Got my ");
</script>
web page content
</body>
</html>
一行 script.js 包含以下内容
alert('x');
css 文件是
body {
font-family: arial;
}
jquery 链接用于检查外部来源。
在 Chrome 上,页面加载并下载这 3 个文件。页面显示
获取我的网页内容
警报未显示,CSS 样式无效
JQuery 脚本没有问题。script.js 文件抛出错误
未捕获的语法错误:无效或意外的标记
反响令人惊讶
污牥⡴挧⤧
响应标头看起来正常
HTTP/1.1 304 Not Modified
Accept-Ranges: bytes
ETag: "f4cca4492325d41:0"
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Date: Thu, 26 Jul 2018 23:49:32 GMT
Chrome 因 in-page-script.js 而引发第二个错误。这是 Ember.js 的一个插件
未捕获的语法错误:无效或意外的标记
内容很多
⨯ਪ⨠吠敨䌠牨浯湡楆敲潦⁸硥整獮潩獮椠橮捥⁴桴湩瀭条ⵥ捳楲瑰椠瑮桴...
script.css文件类似
潢祤笠††潦瑮昭浡汩㩹愠楲污഻紊
现在,如果我在同一个 Chrome 浏览器中单独加载文件(在开发人员工具 > 网络 > 右键单击 script.js 并在新窗口中打开)
他们说得对。这个问题似乎只在页面链接文件中出现。
FireFox 加载了所有文件,但抛出了与 Chrome 类似的错误
SyntaxError:非法字符[了解更多] script.js:1:2
答案是
alert('x');
IE 和 Edge 可以正常运行,并且不会对此页面造成任何问题(我从来没想过我会这么说)。
补救措施我尝试过应用程序池、编码、缓存、磁盘加密、mime 类型。我尝试过的方法都没有奏效。我认为我在使用 iisnode 时以某种方式破坏了 IIS,因为这是第二台出现相同问题的 IIS 服务器。之前的服务器对所有 Web 浏览器的影响相同,导致出现相同的中文/韩文/日文字符。
我很困惑。任何线索都会有帮助
答案1
谢谢 Lex Li。
事实证明,引用脚本或 CSS 文件的页面的编码会影响文件内容在浏览器中的解释方式。
script 标签曾经有一个 charset 属性(已弃用),如果不存在,则默认为 Chrome 和 Firefox 页面的字符集。也许它们仍使用引用页面的字符集来确定引用的 js 或 css 文件的字符集。
看起来 Edge(和 IE)、FF 和 Chrome 对字符集的解释不同。
我更改了 Default.htm 页面的字符集,页面可以正常工作。我找错了地方(js 和 css 文件)。Default.htm 文件如何以 UTF16 LE 编码对我来说是个谜。