Javascript可用于检测重定向图像SRC(在任何流行的浏览器中)?

时间:2010-11-02 22:05:40

标签: javascript dom

我猜不敢,但你永远不知道。

  1. 浏览器加载<img src="http://example.net/lolcat.png">
  2. example.net将lolcat.png重定向到http://static.example.net/bandwidth-exceeded.gif
  3. 我可以检测到这个吗?

    跨浏览器并不重要,只需查找适用于任何一种流行浏览器的选项。

    到目前为止,我最好的选择是了解占位符图像的大小,通过查看图像大小onload(在支持图像标记中的onload事件的浏览器中)获取“可能”,并通知后端快速XHR请求我们有一个也许。

5 个答案:

答案 0 :(得分:5)

我检查了以下代码:

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

,在这种情况下返回0,因为图像不存在。

link text我找到了不少可能值得一试的房产。如果失败了,你可能想看看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

答案 1 :(得分:4)

你问题的答案 Javascript可用于检测重定向图像SRC(在任何流行的浏览器中)? 就像你说的那样简单,不!因为http没有任何识别重定向的选项。这类似于检测网址重定向,这只是javascript的限制。

答案 2 :(得分:2)

我不相信在没有图像属性的先前知识的情况下使用JavaScript检测重定向是可能的。无论任何重定向,当前DOM的src属性都将保持不变,因此该选项已经用完。

我建议您在服务器上创建一个代理脚本。例如,您的图片代码看起来就像(当然有合适的网址编码):

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

您的代理脚本会在提供图像之前检查重定向的标头。这不是万无一失的 - 但它可以允许您在第一次加载时缓存图像,这样您就不会从另一台机器上获得带宽限制错误。

如果它只是出于您自己的目的,您可以在Internet Explorer中使用ActiveXObject来更详细地检查图像。虽然无法帮助你了解具体细节。

我认为您可以在另一方的许可下热链接/缓存图片。

答案 3 :(得分:0)

  

示例.net将lolcat.png重定向到   http://static.example.net/bandwidth-exceeded.gif

什么是lolcat.png?我猜它是一个处理程序,基本上就是这样做:

&LT;% 的Response.Redirect( “带宽exceeded.gif?重定向=真正的”)  %GT;

如果是这样,请尝试使用Helicon的ISAPI URL重写,创建一个正则表达式规则,将查询字符串参数附加到图像的URL末尾

答案 4 :(得分:0)

使用纯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代码,请查看以下帖子: Find redirected img source