¿Cómo recuperar una imagen 'favicon.ico' usando AJAX cuando un sitio web redirige una solicitud HTTP?

Estoy usando Ruby on Rails v3.0.9 y jQuery 1.6. Estoy usando una función de JavaScript (ver la respuesta aceptada) para recuperar el favicon.ico imagen de icono de algunos sitios web.

Como puede ver, todo funciona bien excepto el http://www.gmail.com enlace para el que obtengo un 301 Moved Permanently Respuesta de estado HTTP.

enter image description here

Me gustaria mejorar este código JavaScript así que para seguir la redirección y luego tratar de encontrar el favicon.ico imagen del icono en la URL "redirigida". ¿Cómo puedo mejorar ese código para recuperar correctamente la imagen del favicon?

preguntado el 27 de agosto de 11 a las 15:08

1 Respuestas

No hay nada de malo en su JavaScript. Si intenta ir a favicon.ico en un navegador, verá que ni siquiera le dará el icono. El redireccionamiento 301 apunta a http://mail.google.com/mail/, que sería simplemente una bandeja de entrada de G-Mail. No hay imagen en esta ubicación. Este fue el resultado de curl -i.

HTTP / 1.1 301 movido permanentemente

Ubicación: http://mail.google.com/mail/

G-Mail solo está tratando de llevar a la persona a su bandeja de entrada, ya que no hay nada allí. La ubicación real de favicon.ico de G-Mail es https://mail.google.com/mail/images/2/mail_icon_32.png, que se establece mediante un meta etiqueta en la fuente HTML. De la fuente de G-Mail:

<link rel="icon" href="images/2/mail_icon_32.png" sizes="32x32"> 

Puedes leer más sobre eso aquí.

Respondido 27 ago 11, 20:08

Ok, tienes razón, pero si considero el http://www.gmail.com URL el código JavaScript que vinculé en la pregunta no recuperará correctamente el favicon. Es por esta razón que me gustaría "seguir" la redirección y luego intentar recuperar el favicon. - Backo

@Backo ¿Seguir qué? El 301 está redirigiendo a HTML, no a una imagen. Tendría que obtener el HTML, analizarlo, extraer la metaetiqueta; hacer de la URL una URL absoluta, etc. Sin embargo, nada de eso es realmente posible en el lado del cliente debido a la política de origen cruzado. - vcsjones

¿Puede darme un ejemplo de cómo manejaría esta situación con una implementación de código JavaScript? Creo que te refieres a comprobar (en el img.onerror event) si la solicitud se redirige y luego analiza el código HTML. - Backo

@Backo - el onerror of img solo le dirá si hay un error, no se puede usar para obtener el HTML de dónde redirecciona el 301. Sería una forma demasiado fácil de violar la política de origen cruzado. - vcsjones

Entonces, haciendo un resumen (si he entendido todo): la única solución para hacer que el código JavaScript funcione como espero es: Debo proporcionar al imageExists método el http://mail.google.com/ URL en lugar de http://www.gmail.com/. ¿Ninguna otra solución? - Backo

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.