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 
});