2011-03-25 14 views
6

Mi sitio funciona bien en localhost, mi javascript se está cargando y funciona bien. Pero cuando despliegue el sitio, el script no funciona. Cuando hago clic derecho en la página y digo view source y luego veo el archivo de script enlazado, tiene algunos caracteres extraños al comienzo del archivo ï »¿ (función ($) {Caracteres extraños en Javascript que causan que no se cargue

En localhost, mi archivo de script comienza así (function($){

lo que está causando estos personajes que se antepone a mi archivo javascript?

+2

Me pregunto si los personajes podrían ser el líder de Unicode? – Pointy

+0

@Pointy: Ellos son. Esa es la lista de materiales UTF-8. – Martijn

+0

Usted dice que su script no funciona. Eso no es muy específico. ¿Qué error estás recibiendo? ¿Qué esperabas que sucediera, pero no lo hiciste? ¿Qué informan la consola JavaScript, Firebug, Javascript Debugger y esas herramientas? – Martijn

Respuesta

6

tienes que volver a guardar el archivo en la codificación "UTF-8 sin BOM". puede utilizar Notepad ++ u otro editores

En visual studio:

De forma predeterminada, Visual Studio utiliza la codificación UTF con la lista de materiales; sin embargo, puede guardarlo en una codificación diferente si lo prefiere. Cuando vaya al cuadro de diálogo Guardar como, puede expandir el botón Guardar para ver la opción 'Guardar con codificación'. Esto le solicitará una codificación diferente, y creo que una de las opciones de Unicode omitirá la lista de materiales (en algún lugar de la lista es UTF-8 sin firma).

Fuente: http://forums.silverlight.net/forums/t/144306.aspx

+0

¿No estás seguro de lo que quieres decir? Estoy usando Visual Studio, seguramente no debería haber problemas con los archivos guardados con vs? De todos modos, abrí el archivo en el bloc de notas y lo guardé, no había ï »¿en el archivo, luego lo volví a hacer usando filezilla. Todavía el mismo problema ... – greg

+0

@greg, edité la respuesta. –

+0

Dudo que estos personajes sean la razón del error del guión. La mayoría de los navegadores saben qué hacer con una lista de materiales UTF-8 cuando la ven. Además, OP dice que no están visibles cuando se ejecutan en localhost, lo que sugiere que es solo el Bloc de notas quien no los interpreta. Ergo, el problema del guión está en otra parte. – Martijn

1

Creo Briedis tiene razón sobre el problema, pero sugiero una solución diferente.

Al servir el archivo, que está siendo servido con una Content-type como

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

?

Si es así, asegúrese de utilizar un juego de caracteres UTF-8 en su lugar.

+0

Sería muy agradable mencionar cómo hacer exactamente eso. –

+0

@NikanaReklawyks, sin saber nada sobre su servidor, no puedo. –

1

Acabo de resolver este problema y he encontrado una solución.

Como respuesta a la pregunta de Martjin, el problema es que estos caracteres URF-8 BOM invalidan el javascript cuando el cliente espera ASCII puro. Entonces dirá que hay un error en char 1, línea 1 o algo así, básicamente, justo al comienzo del archivo porque hace que el archivo de código parezca que hay un error tipográfico en los primeros bytes del script.

En mi caso, tengo un sitio en IIS que es una aplicación ASP.NET, y una aplicación debajo que también es una aplicación ASP.NET. Esto causó algunas complicaciones con la herencia de web.configs, y la solución fue poner una etiqueta que niega la herencia a partir de ese momento.

Luego descubrí que todos mis .js en el sitio secundario estaban arrojando un error para ese estúpido símbolo de codificación UTF-8 que eran los primeros 3 bytes de cada archivo. Estoy razonablemente seguro de que se debe a cierta confusión en los httphandlers de mi solución de 2 niveles para web.configs.

Mi solución, sin embargo, era convertir los archivos .js a ASCII puro, ya que eso era lo que IIS estaba enviando y el cliente esperaba. Para mí, tengo un build.bat que copia todos los archivos web, elimina cualquier control de fuente y archivos de proyecto y los coloca en un directorio de compilación final para copiar en el servidor de prueba o producción. Hice una modificación a esa secuencia de comandos para convertir también todos los archivos .js a formato ASCII.

Se utiliza una combinación de DOS por lotes (porque ahí es donde empecé) y PowerShell (porque esa es la única manera que encontré para convertir sin añadir aún más programas de utilidad):

conjunto DIRTOCONVERT = cualquier camino que lo quieren para convertir todos los archivos para ECHO eliminar UTF-8 BOM chars ï »? desde el frente de los archivos para/r% DIRTOCONVERT% %% g en (* .js) do ( powershell -command "gc -en utf8 \" %% g \ "| Out-File -en ascii. \ tmp.txt ". movimiento/y \ tmp.txt "%% g" )

Nota, unas pocas personas en línea (incluso en stackoverflow) tuvo la idea de tratar: tipo badfile.txt> goodfile.txt

pero eso todavía transporta la codificación UTF-8. Aparentemente, no solía hacer eso.

Cuestiones relacionadas