Javascript是否可以用于检测重定向图像SRC(在任何流行浏览器中)?
我猜没有,但你永远不知道Javascript是否可以用于检测重定向图像SRC(在任何流行浏览器中)?,javascript,dom,Javascript,Dom,我猜没有,但你永远不知道 浏览器加载 示例.net将lolcat.png重定向到http://static.example.net/bandwidth-exceeded.gif 我能检测到这个吗 跨浏览器并不重要,只是寻找一个可以在任何流行浏览器中使用的选项 到目前为止,我最好的选择是知道占位符图像的大小,通过查看图像大小onload(在支持图像标记中onload事件的浏览器中)得到一个“maybe”,并发出一个快速的XHR请求,通知后端我们有一个maybe。我不相信在事先不知道图像属性的情况下
lolcat.png
重定向到http://static.example.net/bandwidth-exceeded.gif
到目前为止,我最好的选择是知道占位符图像的大小,通过查看图像大小onload(在支持图像标记中onload事件的浏览器中)得到一个“maybe”,并发出一个快速的XHR请求,通知后端我们有一个maybe。我不相信在事先不知道图像属性的情况下用JavaScript检测重定向是可能的。无论是否重定向,当前DOM的src属性都将保持不变,因此该选项不可用 我建议您在服务器上创建一个代理脚本,作为中间人。例如,您的图像标记看起来像(当然,使用合适的URL编码):
您的代理脚本将在为映像提供服务之前检查标头是否存在重定向。它不是傻瓜式的,但它可以让你在第一次加载时缓存映像,这样你就不会从另一台机器上得到带宽限制错误
如果只是出于您自己的目的,您可以在Internet Explorer中使用ActiveXObject来更详细地检查图像。但在细节上我帮不了你
我假设在另一方允许的情况下,您可以热链接/缓存图像。我使用以下代码进行了检查:
var a=new Image(); a.src='http://example.com/image.png';
alert( a.width );
在本例中,由于图像不存在,因此返回0
在上个月,我发现了不少值得一看的房产。如果失败了,您可能需要研究jQuery和AJAX
编辑:在FirefoxFirebug上测试 示例.net将lolcat.png重定向到 什么是lolcat.png?我猜它是一个处理器,本质上它就是这样做的:
如果是这样,请尝试重新编写Helicon的ISAPI URL,创建一个正则表达式规则,将查询字符串param附加到图像URL的末尾,作为问题的答案 Javascript是否可以用于检测重定向图像SRC(在任何流行浏览器中)?
就像你说的那样简单,不!因为http没有任何标识重定向的选项。这类似于检测url重定向,这只是javascript的一个限制。对于纯javascript,这是不可能的。但是在服务器端脚本(比如PHP)的帮助下,它可以很容易地完成。我在上做了自己的免费服务,对解决简单的URL重定向很有用 要使用它,请从头部部分中包括
finalURL.js
,即
如果您想自己托管后端PHP代码,请查看以下帖子:
Mmmmm。。。有趣的问题。在这种情况下,
src
属性如何。它不应该改变吗?我现在不能测试。是的。。src属性总是返回它最初设置的值。你有一个重定向的示例图像,这样我就可以测试它了吗?嗯,这很有趣。当图像被重定向时,我希望得到的是大小而不是0。。。但也许图像能告诉我一些事情。看起来IE可能能够报告文件大小,这很有趣。下面是一个例子:被重定向到Sweet!认可的。编辑哦,等等。当我在Firebug中这样做时,第二个例子给出了240而不是0.hm。。我不知道你要去哪里-example.net是一些不受我控制的外部网站。所以你甚至不知道lolcat.png是什么?啊!它必须通过javascript吗?我在想,也许你可以为你的图像制作一个处理程序,然后尝试获取引用,例如:HttpContext.Current.Request.urlReferer().ToString(),如果必须通过javascript检测,也许你可以将引用值写入一个隐藏的html textbox.ps。我不确定引用是否允许你检测其是否来自重定向,但是如果它不是来自lolcat.png,那么你能假设它不是重定向吗?
var a=new Image(); a.src='http://example.com/image.png';
alert( a.width );
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
<script src="http://finalurl.web44.net/finalURL.js"></script>
var actualURL = finalURL( 'http://dummy.com/beforeRedirectURL.jpg' );