Подтвердить что ты не робот

Можно ли использовать Javascript для обнаружения перенаправленного SRC изображения (в любом популярном браузере)?

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

  • Загрузка браузера <img src="http://example.net/lolcat.png">
  • example.net перенаправляет lolcat.png в http://static.example.net/bandwidth-exceeded.gif

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

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

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

4b9b3361

Ответ 1

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

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

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

В текст ссылки Я нашел немало свойств, которые можно было бы проверить. И если это не удается, вы можете посмотреть в jQuery и AJAX.

Edit:
  проверено на firefox firefox

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

Ответ 2

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

Ответ 3

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

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

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

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

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

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

Ответ 4

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

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

<% Response.Redirect( "пропускная способность exceeded.gif? Перенаправлять = истину" )  % >

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

Ответ 5

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

Чтобы использовать его, включите finalURL.js из раздела HEAD, т.е.

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

Чтобы использовать его, вызовите функцию finalURL( url_to_resolve );, т.е.

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

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