2016-02-10 23 views
1

首先,让我们大家都来看看这个可爱的猫头鹰:img.onerror()似乎不火,如果URL有坏域

http://happy.fm/wp-content/uploads/2011/10/random-owl.jpg 

我使用的是作为一个测试图像,看看我能使用客户端Javascript检测给定的URL是否是合法图像。我在网上追捕四周,发现应该工作一些简单的代码:

const img = new Image(); 
img.onload =() => { 
    console.log("HOORAY! SUCCESS!", img); 
} 

img.onerror =() => { 
    console.log("BOO! FAIL!") 
} 

img.src = values.image; 

如果我把其中有一个有效的域名URL,但是错误的文件路径,如:

http://happy.fm/wp-content/uploads/2011/10/random-owlDOESNOTEXIST.jpg 

..然后onerror()可靠地起火。但是,如果是假的,是这样的:

http://happy.fmDOESNOTEXIST/wp-content/uploads/2011/10/random-owl.jpg 

...然后onerror()永远不会触发。这是否像预期的行为?有没有办法解决?

是的,我意识到只做客户端验证不是真正处理这个问题的最好方法,而是假装这是唯一的方法。

编辑:值得一提的是,我在Node.js/Webpack本地环境中看到这个错误,它运行在webpack-dev-server之上。也许这会成为某种权限问题。

+0

这是奇怪的行为。你可以使用像这样的东西检查url是否存在,https://stackoverflow.com/questions/10926880/using-javascript-to-detect-whether-the-url-exists-before-display-in-iframe。这足以得到答案吗? –

+1

我似乎无法重现[错误](https://jsfiddle.net/59bhj75r/),因为,onerror似乎正在按预期发射 –

+0

如果你在WordPress中这样做,你可以绑定'site_url()'at开始并得到的图像 –

回答

0

好吧,我是个白痴。我有一个上游检查来验证入站URL是否是有效的格式。当我检查了域名,我这样做:

http://happy.f/wp-content/uploads/2011/10/random-owl.jpg 

这是不合法的有一个顶级域名,这是一个单个字符,所以我的验证程序逮到。只要我把一个有效格式,但是,仍然伪造的顶级域名,就像这样:

http://happy.fasdfasdfasdfasdf/wp-content/uploads/2011/10/random-owl.jpg 

onerror()法进行烧结。

那么...哦。