[英]JS to change image/video src if server unreachable
问题:我对一个小的JavaScript代码感兴趣,该代码检查用户是否有权访问Smugmug.com,如果没有,则将图像源更改为其他服务器(计划使用视频实现此功能,但此示例仅使用图像)。 将在同一html页面上进行一次Smugmug检查,对多个Source进行更改。 这是我整理来测试的jsfiddle 。 当我将smugmug.com/favicon.ico
更改为smug1234mug.com/favicon.ico
,代码不会更改源图像。
HTML:
<body>
<img id="myImage1" onload="changeImage('myImage1','http://www.prometeogallery.com/wp-content/uploads/2011/01/Invitation_NO_GLOBALTOUR-800x575.jpg')" src="http://www.americanrestomods.com/wp-content/uploads/2011/09/logo-portfolio-smugmug.png" width="100" height="100">
</body>
JS:
// check if SmugMug is reachable (run once only)
var isSmugMug = "1";
var SMimage = new Image();
SMimage.onload = function(){
window.isSmugMug = "1";
// The user can access SmugMug
};
SMimage.onerror = function(){
// The user can't access SmugMug
window.isSmugMug = "0";
};
SMimage.src = "http://smugmug.com/favicon.ico";
function changeImage(p1,p2) {
if (window.isSmugMug===0) {
document.getElementById(p1).src=p2;
}
}
据我所知,您有两个问题。 第一个是关于使用三重等于( ===
)的小问题,三重等于运算符不仅检查值相等,还检查类型相等。
由于您在值声明,onload和onerror函数中使用字符串,并且在if语句中使用数字,因此条件永远不会为true,因为"1"===1
为false。 您可以将条件更改为字符串,也可以只使用普通的double等于。
您遇到的第二个问题更加复杂,这是由于触发了各种事件的时间所致,您编写的代码仅在事件以特定顺序触发时才起作用, changeImage
函数依赖于isSmugMug
适当设置,当它被调用时,如果changeImage
是之前称为SMimage
加载(或没有) isSmugMug
仍将是默认值1
这是解决第二个问题的示例:
// check if SmugMug is reachable (run once only)
var isSmugMug = "1";
var smugMugChecked = false;
var SMimage = new Image();
SMimage.onload = function(){
window.isSmugMug = "1";
smugMugChecked = true;
// The user can access SmugMug
};
SMimage.onerror = function(){
// The user can't access SmugMug
window.isSmugMug = "0";
smugMugChecked = true;
};
SMimage.src = "http://smugmug.com/favicon.ico";
function changeImage(p1,p2) {
var checkInterval = setInterval(function(){
if (smugMugChecked == true) {
clearInterval(checkInterval);
if (window.isSmugMug==0) {
document.getElementById(p1).src=p2;
}
}
}, 500);
}
在这里,我添加了一个变量来保存SMimage
检查是否已完成的状态, changeImage
使用500毫秒间隔的计时器等待SMimage
检查完成,在检查完成后,将计时器删除,并且将图像已更改。 这不是一个完美的解决方案,尤其是如果您在一页上有很多此类检查的情况下。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.