2010-11-02 4 views
18

Supongo que no, pero nunca se sabe.¿Se puede usar Javascript para detectar una imagen redirigida SRC (en cualquier navegador popular)?

  1. navegador carga <img src="http://example.net/lolcat.png">
  2. example.net redirige a lolcat.pnghttp://static.example.net/bandwidth-exceeded.gif

¿Puedo detectar esto?

Cross-browser no es importante, solo busca una opción que funcione en cualquier navegador popular.

Hasta ahora, mi mejor opción es conocer el tamaño de la imagen de marcador de posición, obteniendo un "tal vez" mirando el tamaño de la imagen en carga (en navegadores compatibles con eventos de carga en etiquetas de imagen) y haciendo una solicitud XHR rápida notificando al backend que tenemos un tal vez.

+0

Mmmmm ... Interesante pregunta. ¿Qué tal la propiedad 'src' en tal caso? ¿No/no debería cambiar? No puedo probar en este momento. –

+0

sí ... la propiedad src siempre devuelve lo que estaba configurado originalmente. – casey

Respuesta

2

No creo que sea posible detectar una redirección con JavaScript sin algún conocimiento previo de las propiedades de la imagen. La propiedad src del DOM actual seguirá siendo la misma independientemente de cualquier redirección, por lo que esa opción está desactivada.

Le sugiero que cree un script de proxy en su servidor que actúe como un intermediario. Por ejemplo, la etiqueta de imagen sería algo así (con codificación URL adecuada, por supuesto):

<img src='/proxy?src=http://example.com/image.png' /> 

Su script de proxy podría inspeccionar las cabeceras de las redirecciones antes de servir la imagen. No es a prueba de tontos, pero podría permitirle, por ejemplo, almacenar en caché la imagen en la primera carga para que no obtenga errores de límite de ancho de banda de la otra máquina.

Si solo es para sus propios fines, es posible que pueda usar un objeto ActiveXObject dentro de Internet Explorer para inspeccionar la imagen con más detalle. Sin embargo, no puedo ayudarte con los detalles.

Supongo que tiene permiso para vincular/almacenar en caché la imagen con el permiso de la otra parte.

5

he comprobado con el siguiente código:

var a=new Image(); a.src='http://example.com/image.png'; 
alert(a.width); 

que en este caso devuelve 0 ya que la imagen no existe.

En link text encontré bastantes propiedades que vale la pena visitar. Y si eso falla, es posible que desee examinar jQuery y AJAX.

Editar:
probado en Firefox Firebug

var a=new Image(); 
a.src='http://l.yimg.com/g/images/photo_unavailable_m.gif'; 
console.log(a.width); // the image exists and returns 240 

var b=new Image(); 
b.src='http://farm3.static.flickr.com/2560/4098180849_729ef4f6ef_m.jpg'; 
console.log(b.width); // the image does not exist (re-direct) and returns 0 
+0

¿Tiene una imagen de muestra que se redirige para que pueda probar esto? – patrick

+0

hm. Eso es interesante. Cuando se redirige una imagen, esperaría obtener el tamaño y no 0 ... pero tal vez Image puede decirme algo. Parece que IE podría informar el tamaño del archivo, lo cual es interesante. Aquí hay un ejemplo: http://farm3.static.flickr.com/2560/4098180849_729ef4f6ef_m.jpg se redirige a http://l.yimg.com/g/images/photo_unavailable_m.gif – casey

+0

¡lindo! Lo lograste. – Frankie

0

ejemplo .net redirige a lolcat.png http://static.example.net/bandwidth-exceeded.gif

Lo que se lolcat.png? Supongo que es un controlador y básicamente solo hace esto:

<% Response.Redirect ("bandwidth-excedido.gif?redirigir = true ") %>

Si es así, haga que su tratado de reescritura de URL ISAPI de Helicon, cree una regla de expresiones regulares para añadir un parámetro de cadena de consulta en el extremo de la URL de la imagen

+0

hm .. No estoy seguro de a dónde vas con esto - example.net es un sitio externo que no controlo yo. – casey

+0

por lo que ni siquiera sabes lo que es lolcat.png? doh! ¿Tiene que ser a través de javascript? Estoy pensando que quizás podría hacer un controlador para sus imágenes http://dotnetperls.com/ashx y luego tratar de obtener la referencia, por ejemplo: HttpContext.Current.Request.UrlReferrer(). ToString(), entonces si tiene que hacerlo ser detectado a través de javascript, tal vez podría escribir el valor de referencia en un cuadro de texto html oculto. –

+0

ps No estoy seguro de que la referencia te permita detectar si proviene de una redirección, pero si no es de lolcat.png ¿puedes entonces asumir que no es una redirección? –

4

la respuesta a su pregunta ¿Se puede utilizar Javascript para detectar una imagen redirigida SRC (en cualquier navegador popular)? es simple como dijiste, ¡no! Porque http no tiene ninguna opción para identificar la redirección. Esto es similar a la detección de redirección de url, que es simplemente una limitación para javascript.

0

Con javascript puro, es imposible. Pero con la ayuda del script del lado del servidor (como PHP), puede ser hecho fácilmente He creado mi propio servicio gratuito en http://finalurl.web44.net, útil para resolver la redirección URL simple.

Para usarlo, incluyen finalURL.js desde el interior de la sección HEAD, es decir

<script src="http://finalurl.web44.net/finalURL.js"></script> 

Para usarlo, llaman finalURL(url_to_resolve); función, es decir

var actualURL = finalURL('http://dummy.com/beforeRedirectURL.jpg'); 

Si desea alojar la parte de atrás - finalice el código PHP por usted mismo, consulte la siguiente publicación: Find redirected img source

Cuestiones relacionadas