使用javascript,如何在img src上重定向302之后获得最终结果URL?

时间:2011-06-28 17:32:48

标签: javascript dom

如果页面中有一个img标记,其最终图像显示在302重定向之后,是否有一种方法可以使用javascript获取重定向后的最终URL?在img.src上使用javascript只获取第一个URL(页面中的内容),而不是重定向到的内容。

这是一个jsfiddle插图:http://jsfiddle.net/jfriend00/Zp4zG/

5 个答案:

答案 0 :(得分:4)

不,这是不可能的。 src是一个属性,不会更改。

答案 1 :(得分:1)

我知道这个问题已经过时了,并且已经标记为已回答,但我试图回答的另一个问题被标记为重复此问题,我在任何现有答案中都没有看到任何迹象表明您< strong> 可以 通过HTTP标头获取真正的URL。一个简单的例子(假设页面上有一个图像标签)就是这样......

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();

答案 2 :(得分:1)

如果您愿意使用第三方代理,则可以这样做。显然不是javascript解决方案这个使用来自 cors-anywhere.herokuapp.com 的代理服务。只需为那些对代理开放并且不愿意在后端实现此功能的人添加此解决方案。

这是fork of the original fiddle

$.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'));
   }
  });

答案 3 :(得分:0)

基于http://jsfiddle.net/jfriend00/Zp4zG,此代码段适用于 Firefox 17.0

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

它在Chrome中不起作用。没有测试任何其他东西 -

答案 4 :(得分:0)

这是我发现的一种解决方法。但它只适用于同一域上的图像,否则你会得到一个空字符串:

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/