Можно ли использовать Javascript для обнаружения SRC с перенаправленным изображением (в любом популярном браузере)? - PullRequest
19 голосов
/ 03 ноября 2010

Я предполагаю, что нет, но вы никогда не знаете.

  1. Браузер загружает <img src="http://example.net/lolcat.png">
  2. example.net перенаправляет lolcat.png на http://static.example.net/bandwidth-exceeded.gif

Могу ли я обнаружить это?

Кросс-браузер не важен, просто ищите опцию, которая будет работать в любом популярном браузере 1.

Пока что мой лучший вариант - узнать размер изображения-заполнителя, получить«возможно», посмотрев на размер загружаемого изображения (в браузерах, поддерживающих события загрузки в тегах изображений) и сделав быстрый XHR-запрос, уведомляющий серверную часть о том, что у нас есть возможно.

Ответы [ 5 ]

5 голосов
/ 03 ноября 2010

Я проверил следующий код:

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

, который в этом случае возвращает 0, так как изображение не существует.

On текст ссылки Я нашел довольно много свойств, которые, возможно, стоит проверить.И если это не удастся, вы можете посмотреть в JQuery и AJAX.

Редактировать :
проверено на 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
4 голосов
/ 03 ноября 2010

ответ на ваш вопрос Можно ли использовать Javascript для обнаружения SRC с перенаправленным изображением (в любом популярном браузере)? просто, как вы сказали, нет! потому что http не имеет никакой возможности для определения перенаправления. Это похоже на обнаружение перенаправления URL, что является просто ограничением для JavaScript.

2 голосов
/ 03 ноября 2010

Я не верю, что с помощью JavaScript можно обнаружить перенаправление без предварительного знания свойств изображения.Свойство src текущего DOM останется неизменным независимо от какого-либо перенаправления, поэтому этот параметр недоступен.

Я бы посоветовал вам создать прокси-скрипт на вашем сервере, который будет действовать как промежуточный пункт.Например, ваш тег изображения будет выглядеть примерно так (с подходящей кодировкой URL, конечно):

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

Ваш прокси-скрипт будет проверять заголовки на предмет перенаправлений перед передачей изображения.Это не защищает от ошибок - но это может позволить вам, например, кэшировать изображение при первой загрузке, чтобы вы не получали ошибок ограничения полосы пропускания с другого компьютера.

Если это только для вас самогоВ некоторых случаях вы можете использовать ActiveXObject в Internet Explorer для более детальной проверки изображения.Хотя не могу помочь вам в деталях.

Я предполагаю, что вам разрешено хотлинкировать / кэшировать изображение с разрешения другой стороны.

0 голосов
/ 20 января 2014

С чистым javascript это невозможно.Но с помощью серверного скрипта (такого как PHP) это легко сделать.Я сделал свой собственный бесплатный сервис на http://finalurl.web44.net,, полезный для разрешения простого перенаправления URL.

Чтобы использовать его, включите в раздел HEAD finalURL.js, т.е.* <script src="http://finalurl.web44.net/finalURL.js"></script> Чтобы использовать его, вызовите функцию finalURL( url_to_resolve );, т.е.

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

Если вы хотите разместить внутренний PHP-код самостоятельно, проверьте следующий пост: Найти перенаправленный источник img

0 голосов
/ 03 ноября 2010

пример .net перенаправляет lolcat.png в http://static.example.net/bandwidth-exceeded.gif

Что такое lolcat.png?Я предполагаю, что это обработчик и, по сути, он просто делает это:

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

Если так, имейтеперепрограммируйте URL-адрес ISAPI для вашего проверенного Helicon, создайте правило регулярного выражения, чтобы добавить параметр строки запроса в конец URL-адреса изображения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...