С javascript, как вы получите окончательный результат URL после 302 перенаправления на IMG SRC? - PullRequest
4 голосов
/ 28 июня 2011

Если на странице есть тег img, окончательное изображение которого отображается после перенаправления 302, есть ли способ с помощью javascript получить окончательный URL-адрес после перенаправления? Используя javascript на img.src, вы получаете только первый URL (то, что на странице), а не то, на что он был перенаправлен.

Вот иллюстрация jsfiddle: http://jsfiddle.net/jfriend00/Zp4zG/

Ответы [ 5 ]

4 голосов
/ 28 июня 2011

Нет, это невозможно.src является атрибутом и не изменяется.

1 голос
/ 25 октября 2016

Если вы открыты для использования стороннего прокси, это может быть сделано.Очевидно, не является решением javascript Этот использует прокси-сервис из cors-anywhere.herokuapp.com .Просто добавьте это решение для людей, которые открыты для прокси и не хотят реализовывать это в бэкэнде.

Вот форк оригинальной скрипки

$.ajaxPrefilter( function (options) {
  if (options.crossDomain && jQuery.support.cors) {
    var http = (window.location.protocol === 'http:' ? 'http:' : 'https:');
    options.url = http + '//cors-anywhere.herokuapp.com/' + options.url;
    //options.url = "http://cors.corsproxy.io/url=" + options.url;
  }
});

 $.ajax({
   type: 'HEAD', //'GET'
   url:document.getElementById("testImage").src,
   success: function(data, textStatus, request){
        alert(request.getResponseHeader('X-Final-Url'));
   },
   error: function (request, textStatus, errorThrown) {
        alert(request.getResponseHeader('X-Final-Url'));
   }
  });
1 голос
/ 31 августа 2015

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

var req = new XMLHttpRequest();

req.onreadystatechange=function() {
    if (req.readyState===4) {// && req.status===200) {
        alert("actual url: " + req.responseURL);
    }
}

req.open('GET', $('img').prop('src'), true);
req.send();
0 голосов
/ 31 августа 2015

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

var img = document.getElementById("img");

getSrc(img.getAttribute("src"), function (realSrc) {
    alert("Real src is: " + realSrc);
});

function getSrc(src, cb) {
    var iframe = document.createElement("iframe"),
        b = document.getElementsByTagName("body")[0];

    iframe.src =  src;
    iframe.className = "hidden";
    iframe.onload = function () {
        var val;

        try {
            val = this.contentWindow.location.href;
        } catch (e) {
            val = "";
        }

        if (cb) {
            cb(val);
        }


        b.removeChild(this);
    };

    b.appendChild(iframe);
}

http://jsfiddle.net/infous/53Layyhg/1/

0 голосов
/ 03 декабря 2012

на основе http://jsfiddle.net/jfriend00/Zp4zG, этот фрагмент работает в Firefox 17.0 :

alert(document.getElementById("testImage").baseURI)

Он не работает в Chrome.Ничего другого не проверял-

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