我的网站在localhost上工作正常,我的javascript正在加载并正常工作。但是当我部署网站时,脚本无法运行。当我右键单击页面并说出查看源然后查看链接的脚本文件时,它在文件的开头有一些奇怪的字符(函数($){
在localhost上,我的脚本文件以(function($){
是什么导致这些字符被添加到我的javascript文件中?
答案 0 :(得分:6)
您必须以“UTF-8无BOM”编码重新保存文件。 您可以使用Notepad ++或其他编辑器。
在视觉工作室:
默认情况下,Visual Studio使用带有BOM的UTF编码;但是,如果您愿意,可以将其保存为其他编码。当您转到“另存为”对话框时,可以展开“保存”按钮以查看“使用编码保存”选项。这将提示您输入不同的编码,我认为其中一个Unicode选项会遗漏BOM(列表中的某个位置是UTF-8,没有签名)。
答案 1 :(得分:1)
我认为Briedis对这个问题是正确的,但我建议采用不同的解决方案。
当您提供该文件时,它是否与Content-type
类似
Content-Type: text/javascript;charset=US-ASCII
如果是这样,请确保使用UTF-8字符集来提供服务。
答案 2 :(得分:1)
我刚刚遇到同样的问题,并找到了解决办法。
作为Martjin问题的答案,问题是当客户端期望纯ASCII时,这些URF-8 BOM字符使javascript无效。所以它会说char 1,line 1或者其他一些错误,基本上就是在文件的开头,因为它使得代码文件看起来像是脚本的前几个字节中的拼写错误。
在我的情况下,我在IIS中有一个ASP.NET应用程序站点,下面有一个应用程序,它也是一个ASP.NET应用程序。这导致了继承web.configs的一些复杂问题,解决方案是放置一个标记,否定继承从那一点开始。
然后我发现子站点中的所有.js都为这个愚蠢的UTF-8编码符号抛出了一个错误,该符号是每个文件的前3个字节。我有理由相信,这是因为我的2层web.configs解决方案中的httphandlers存在一些混淆。
我的解决方案是将.js文件转换回纯ASCII,因为IIS正在发送并且客户端期待。对我来说,我有一个build.bat复制所有的Web文件,删除任何源代码控制和项目文件,并将它们全部放在最终的构建目录中,以便复制到测试或生产服务器。我对该脚本进行了修改,以便将所有.js文件转换为ASCII格式。
它使用DOS批处理(因为那是我开始的地方)和PowerShell的组合(因为这是我发现转换的唯一方法,而不添加更多的实用程序):
设置DIRTOCONVERT =您希望它转换所有文件的路径 ECHO删除UTF-8 BOM字符ï»?从文件前面 for / r%DIRTOCONVERT %%% g in(* .js)do( powershell -command“gc -en utf8 \”%% g \“| Out-File -en ascii。\ tmp.txt” move / y。\ tmp.txt“%% g” )
注意,一些在线人员(即使在StackOverflow中)有想法尝试: type badfile.txt> goodfile.txt
但仍然继续使用UTF-8编码。显然,它不习惯这样做。