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

With javascript, how do you get final result URL after 302 redirect on img src?

本文关键字:重定向 URL 结果 javascript src img 使用      更新时间:2023-09-26

如果页面中有一个img标记,它显示的最终图像是在302重定向后出现的,那么有没有办法使用javascript来获取重定向后的最终URL?在img.src上使用javascript只获取第一个URL(页面中的内容),而不是重定向到的内容。

下面是一幅jsfiddle插图:http://jsfiddle.net/jfriend00/Zp4zG/

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

我知道这个问题很旧,已经被标记为已回答,但我试图回答的另一个问题被标记为该问题的重复,并且我在任何现有答案中都看不到任何迹象表明可以通过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();

如果您对使用第三方代理持开放态度,这是可以做到的。显然,不是一个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'));
   }
  });

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

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

它在Chrome中不起作用。未测试任何其他内容-

下面是我找到的一个解决方法。但只有当图像在同一个域上时,它才能工作,否则你会得到一个空字符串:

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/