2011-03-25 49 views
6

我的網站在localhost上運行正常,我的JavaScript正在加載並正常工作。但是當我部署該網站時,該腳本無法正常工作。當我用鼠標右鍵單擊該頁面,並說查看源代碼,然後查看鏈接的腳本文件,它有一些奇怪的字符在文件(函數($){Javascript中的奇怪字符導致它無法加載

在本地主機上,我的腳本文件的開始這樣(function($){

開始是什麼原因造成這些字符被加在我的JavaScript文件?

+2

我不知道這些字符是否可能是Unicode領導者? – Pointy 2011-03-25 15:43:50

+0

@Pointy:他們是。這是UTF-8 BOM。 – Martijn 2011-03-25 16:14:02

+0

你說你的腳本不工作。這不是很具體。你遇到了什麼錯誤?你預期會發生什麼,但沒有? Javascript控制檯,Firebug,Javascript調試器和這些工具報告什麼? – Martijn 2011-03-25 16:17:45

回答

6

你必須將文件重新保存編碼「UTF-8無BOM」。 可以使用記事++或其他編輯器。

在visual studio中:

默認情況下,Visual Studio使用UTF編碼和BOM;不過,如果您願意,可以將其保存爲不同的編碼。當您轉到另存爲對話框時,您可以展開保存按鈕以查看「使用編碼保存」選項。這將提示您輸入不同的編碼,我認爲其中一個Unicode選項會省略BOM(列表中的某處是沒有簽名的UTF-8)。

來源:http://forums.silverlight.net/forums/t/144306.aspx

+0

不確定你的意思?我正在使用Visual Studio,當然不應該有用vs保存文件的問題?無論如何,我在記事本中打開文件並保存,文件中沒有任何文件,然後使用filezilla重新將其複製。還是同樣的問題... – greg 2011-03-25 15:48:31

+0

@greg,我編輯了答案。 – 2011-03-25 15:54:13

+0

我懷疑這些字符是腳本失敗的原因。大多數瀏覽器在看到它時都知道如何處理UTF-8 BOM。另外,OP表示在localhost上運行時它們不可見,這表明它只是記事本不能解釋它們。埃爾戈,劇本問題在別處。 – Martijn 2011-03-25 16:16:35

1

我覺得Briedis是對這個問題,但我建議不同的解決方案。

當你提供服務的文件,它是被送達Content-type

Content-Type: text/javascript;charset=US-ASCII 

如果是這樣,請務必使用UTF-8字符集代替它。

+0

提到如何做到這一點非常好。 – 2015-01-04 03:06:08

+0

@NikanaReklawyks,不知道你的服務器,我不能。 – 2015-01-05 02:22:09

1

我剛剛遇到同樣的問題,並找到了解決辦法。

作爲Martjin問題的答案,問題是這些URF-8 BOM字符會在客戶端期望純ASCII時使JavaScript無效。所以它會說在字符1,第1行或者其他類似的地方出現錯誤,基本上就是在文件的開頭,因爲它使得代碼文件看起來像腳本的前幾個字節中有一個錯字。

就我而言,我在IIS中有一個Site,它是一個ASP.NET應用程序,它下面的應用程序也是一個ASP.NET應用程序。這已經導致了繼承web.configs的一些複雜性,解決方法是放置一個標記,否定從那時起的繼承。

然後我發現我的孩子網站中的所有.js都是爲每個文件的前3個字節的那個愚蠢的UTF-8編碼符號拋出一個錯誤。我有理由相信,它是由我的兩層web.configs解決方案中的一些混淆因素造成的。

但是,我的解決方案是將.js文件轉換回純ASCII,因爲這正是IIS發送出的內容和客戶端期望的。對於我來說,我有一個build.bat,用於複製所有網頁文件,刪除任何源代碼管理和項目文件,並將它們全部放入最終生成目錄中,以便複製到測試或生產服務器。我對該腳本進行了修改,以將所有.js文件轉換爲ASCII格式。

它使用DOS批處理的組合(因爲這是我開始)和PowerShell(因爲這是我發現在不增加更多的實用程序轉換的唯一途徑):

集DIRTOCONVERT =任何路徑你想要它將所有文件轉換爲 ECHO刪除UTF-8 BOM字符ï»? (* .js)do( )powershell -command「gc -en utf8 \」%% g \「| out-file -en ascii。\ tmp.txt文件前面的文件 「 移動/ Y \ tmp.txt 」%% G「 )

注意,有幾個人在線(甚至在StackOverflow上)有想法嘗試: BADFILE.TXT型> goodfile.txt

但仍然承載UTF-8編碼。顯然,它並不習慣這樣做。