0

我正在开发一个Rails应用程序的前端。在跨浏览器测试中,我立即发现Internet Explorer(显然是所有现代版本,但至少IE 7和IE 8)没有正确解释我想通过AJAX(使用jQuery)作为JavaScript加载的文件。出现文件下载警告,用户需要确认是否应该下载文件。不幸的是,这对于应用程序的目的是不可接受的。Internet Explorer阻止文件下载; “未知文件类型”文件

我创建了几个测试文件;一个只是从Amazon S3提供的JavaScript文件;另一个实际上是Varnish/Rails提供的资源URL。后者是触发警告的那个。所以:


LINK:URL that gives a warning in IE

请求头:

Accept:  application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-us) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10

响应头:

Age:    1952 
Cache-Control: public, max-age=3598 
Connection:  keep-alive 
Content-Encoding: gzip 
Content-Length: 2060 
Content-Type:  text/javascript; charset=utf-8 
Date:    Fri, 13 Nov 2009 22:54:18 GMT 
Etag:    "272d9ec2e59aa92da18758cf42a4d729" 
Server:   nginx/0.7.61 + Phusion Passenger 2.2.5 (mod_rails/mod_rack) 
Status:   200 OK 
Via:    1.1 varnish 
X-Powered-By:  Phusion Passenger (mod_rails/mod_rack) 2.2.5 
X-Runtime:  0.11573 
X-Varnish:  176673116 176651738

LINK:URL that does not give a warning in IE

请求头:

Accept:  application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-us) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10

响应头:

Age:    14 
Connection:  keep-alive 
Content-Encoding: gzip 
Content-Length: 52 
Content-Type:  text/javascript 
Date:    Fri, 13 Nov 2009 22:55:03 GMT 
Etag:    "7b7ded6696ee52551289c856d3173db4" 
Last-Modified: Fri, 13 Nov 2009 22:30:45 GMT 
Server:   AmazonS3 
Via:    1.1 varnish 
X-Amz-Id-2:  CR79uoLC67sr0e0uj4CUOCoBQgcIW/jaJc/FNSA3zsK3Lns/gAqx98/T9h/UeJGm 
X-Amz-Request-Id: BCF2F2D69F5126DD 
X-Varnish:  1566212056 1566211955

什么,立刻伸出我是“text/JavaScript的的内容类型; charset = utf-8“为URL提供警告 - 是否有效?我一直认为只有”text/javascript“才有效。

此外,提供警告的URL返回Content-输入“text/javascript”,但是它是一个没有扩展名为.js的Rails URL--可能会有所作为吗?

是否还有其他任何内容突出显示,或者没有其他人有任何其他想法可能是造成这个问题?非常感谢您的帮助。

回答

1

已经有一段时间了,我已经忘记了这个问题的细节,但我知道最终的原因是由于POST请求返回了一个Content-Type的“text/javascript”。

显然,IE会将响应头文件中返回“text/javascript”的POST解释为安全威胁,导致它显示可怕的,非常不具有信息性的错误消息栏。

我们将响应的内容类型更改为“text/html”,解决了它!

0

第一件事,我会尝试改变的扩展,.js文件如你所说,Internet Explorer有一些讨厌的扩展名(除其他事项外),用于确定文件类型的基于启发式。

它还嗅着在某些情况下的内容,这样的开头应为这种类型的文件(无怪异字符等)

+0

谢谢EFraim。我们的一位Rails程序员将URL构造更改为包含“index.js”,IE现在将文档类型识别为“JScript” - 向前迈进了一步。但是,这并没有解决问题;使用AJAX加载文件仍然会提示文件提示以确认下载,而不是在后台加载。还有什么可能导致这种情况? – Bungle 2009-11-15 12:12:15

0

确保您的JQuery statment看起来像这样是典型的:

$.ajax({ 
    type: "GET", 
    url: "test.js", 
    dataType: "script" // Defaults to HTML 
});