0

更新

您可以阅读下面的所有详细信息.. 但基本上,现在不管我做什么 VS2012 Typescript 正在编译和保存 ANSI 文件......

我可以手动将文件重新保存为 UTF-8 并且一切正常..

我在 Windows 8 上,我已经在 3 个不同城市的 5 个不同开发人员使用的 5 台不同机器上重现了这个问题......

唯一的共同点是 Windows 8

我有一个示例项目,它在 IE 中运行良好,但在 Chrome 或 FF 中根本没有。看起来文件编码不正确,IE 正在解决它,但 Chrome 和 FF 不是......

例如,这里是编译后的 JavaScript 文件的前几个赞

/// <reference path="../Framework/Core.ts" /> 
var MVVM; 
(function (MVVM) {
var Application = (function () {
    function Application() {
        this.core = undefined;
        this.templatePath = "Atlatl/Templates/";
        this.viewPath = "Atlatl/Views/";
        this.dependentScriptsPath = "Scripts/";
        this.viewModelsPath = "Atlatl/App/ViewModels/";
        this.frameworkPath = "Atlatl/Framework/";
        this.pages = {
        };

这是 Chrome “认为”它从 IIS(8 和 8 express)接收到的内容:

 昨天爼晥牥湥散潆瑡㵨⸢⼮墙浡睥牯⽫潃敲琮≳⼠ാ瘊牡䴠噖㭍਍昨天湵潩䴨噖⥍笠਍†††庆⁲灁汰捩瑡潩‽无聊潩⤨笠

更新

这是文件的 chrome 调用的标题

- 要求 -

Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Host:localhost:40665
If-Modified-Since:Wed, 03 Apr 2013 16:33:17 GMT
If-None-Match:"153551f28830ce1:0"
Referer:http://localhost:40665/
User-Agent:Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31

- 回复 -

Accept-Ranges:bytes
Date:Wed, 03 Apr 2013 17:06:28 GMT
ETag:"153551f28830ce1:0"
Server:Microsoft-IIS/8.0
X-Powered-By:ASP.NET
X-SourceFiles:=?UTF-8?B?QzpcUHJvamVjdHNcUmFuZG9tV29ya1xNdmNBcHBsaWNhdGlvbjEyXE12Y0FwcGxpY2F0aW9uMTJcQXRsYXRsXEFwcFxhcHAuanM=?=

里面没什么好笑的...

我尝试了以下所有编译方法,但都失败了,都是一样的

1) 仅在 VS 中使用 TypeScript 编译器

2) 使用 Web Essentials

A) 设置和不设置 UTF-8 BOM 标志为真

B)在构建时重新编译和不重新编译

我可以提供一个示例项目,或者如果您阅读本教程,您将看到我在说什么https://github.com/CatapultSystems/atlatl/wiki/Visual-studio-hello-world

我完全不知道是什么原因造成的……而且我全神贯注于发生了什么……

4

1 回答 1

2

我认为这与编译或 TypeScript 无关。

生成的 JavaScript 文件没有 BOM 是可以的。

响应应该包含Content-Length: XXXXContent-Type: application/javascript- 而你的没有。这似乎是一种304 Not Modified回应,而不是一种回应200 OK

您是否尝试过使用 Ctrl+F5 在 Chrome 中强制刷新?

更新

在记事本中重新保存选择 UTF-8 的 JavaScript 文件只是添加了 BOM(假设 JS 文件的内容是 7 位 ASCII)。

您应该能够通过设置 Web Essentials 添加 BOM 或添加虚拟字符串常量来产生相同的效果

var dummyChars = "Ù";

到您的 TypeScript 文件。完成此操作后,JavaScript 文件应与从记事本生成的保存文件相同。

于 2013-04-03T20:40:42.107 回答