javascript – 为什么我的图像onload没有在Firefox和Internet Explorer中触发?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 为什么我的图像onload没有在Firefox和Internet Explorer中触发?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2295字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 为什么我的图像onload没有在Firefox和Internet Explorer中触发?](/upload/InfoBanner/zyjiaocheng/696/4d2945bcdf98462f893ed7e6e9d347a5.jpg)
我正在尝试使用解决方案found here检测何时完成一些图像加载
该解决方案在Chrome和Safari中运行得非常好,但在Firefox和IE中都失败了(没有错误).
预加载功能如下:
var preloadPictures = function(pictureUrls, callback) {
var i,
j,
loaded = 0;
for (i = 0, j = pictureUrls.length; i < j; i++) {
(function (img, src) {
img.onload = function () {
if (++loaded == pictureUrls.length && callback) {
callback();
}
};
img.src = src;
} (new Image(), pictureUrls[i]));
}
};
我通过从几个div的背景图像创建一个数组来使用它.文档准备好后,将调用函数loadSlides.一旦所有图片都加载完毕,我的滑块控件会被告知淡入.
function loadSlides() {
if( jQuery('#frontpage-slider')[0] ) {
var pictures = [];
jQuery('#frontpage-slider .slide').each(function() {
var bg = $(this).css('background-image');
bg = bg.replace('url(','').replace(')','');
pictures.push( bg );
});
preloadPictures( pictures, function() {
jQuery('.slide-controls').css('visibility','visible').hide().fadeIn('slow');
} );
}
}
如果我警告图片变量我得到一个具有以下值的数组,所以我不认为我的问题与值有任何关系.
http://foo.bar/content/user_files/2014/08/test-2.png
http://foo.bar/content/user_files/2014/08/test-1.png
我尝试了其他一些解决方案in the thread linked above但似乎没有一个有效.我尝试了jQuery解决方案,设置img.src =”;在设置实际来源之前,但没有任何反应.
任何帮助表示赞赏.
编辑:我创建了以下jsfiddle:http://jsfiddle.net/yuaond6b/2/
我在该脚本中遇到了同样的问题,因为它适用于Chrome,但在Firefox中没有任何功能.我不得不修改脚本因为某些原因jsfiddle不喜欢我的变量函数,但结果是一样的.
编辑2:如果我向我的img添加“onerror”函数,它会被触发.不幸的是,我试图从这些错误中提取消息,似乎无法弄清楚它是如何工作的.
解决方法:
Firefox正在破解,因为代码行:
var bg = jQuery(this).css('background-image');
返回带引号的网址:
url("https://i.imgur.com/fTb97EO.jpg")
而在Chrome中,它返回它没有引号:
url(https://i.imgur.com/fTb97EO.jpg)
然后你删除在Chrome中工作正常的网址(和),但这意味着在Firefox中字符串bg周围有额外的引号.这意味着当您设置src属性时,Firefox会将这些额外的引号转换为“然后无法识别URL并尝试加载本地路径.以下是Firefox在jsfiddle中运行时尝试加载的内容:
http://fiddle.jshell.net/yuaond6b/4/show/%22https://i.imgur.com/S1OPVB6.jpg%22
解决方案是使用正则表达式删除“在Firefox中,但不在Chrome中”:
bg = bg.replace(/url\(["]*/,'').replace(/["]*\)/,'');
如下图所示:
http://jsfiddle.net/yuaond6b/6/
这适用于Chrome和Firefox!
内容总结
以上是互联网集市为您收集整理的javascript – 为什么我的图像onload没有在Firefox和Internet Explorer中触发?全部内容,希望文章能够帮你解决javascript – 为什么我的图像onload没有在Firefox和Internet Explorer中触发?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。