我有一个图像/媒体tumblr,它在第一页上加载了12-25张图像,这些图像可能非常大。
我让jQuery在布局和图像上做各种化妆品,特别是,我正在检查每个帖子,看看它是不是照片集,由Tumblr作为iframe。
从视觉上看,人们会看到照片集的缩略图预览库,当您点击缩略图时,它会打开一张带有全尺寸照片的灯箱幻灯片。
我的tweek等待加载iframe,删除缩略图库并将其替换为图库中的第一个完整分辨率图像。
这是我的代码:
$(".post_relative").each(function () {
var post_relative = $(this);
var photoset = post_relative.find('.html_photoset');
if(photoset.length){
var myFrame = photoset.find("iframe");
myFrame.load(function(){
console.log("frame loaded");
var newCover = myFrame.contents().find('.photoset').children(':first-child').children(':first-child');
myFrame.contents().find('img').each(function(){
$(this).hide();
})
newCover.children(':first-child').remove();
var psPre = newCover.attr("href")+ '?' + (Math.random() * 1000000);
newCover.append("<img src='"+ psPre +"' alt='Cover Page' />");
var psHeight = newCover.find('img');
psHeight.load(function(){
if (psHeight.height()>heightRef){
psHeight.height(heightRef);
}
newCover.detach();
post_relative.append(newCover);
myFrame.hide();
})
})
}
无论如何,它有效率,75%的时间。我只能想象Tumblr有时会超载,或者页面上有太多的东西?
是什么导致jQuery不一致?是否有jQuery代码允许我仔细检查代码是否正确完成?
你可以看到它在这里工作与否: http://syndex.me
如果它不起作用,第三篇文章将如下所示:
如果它正常工作,它将如下所示:
答案 0 :(得分:1)
我怀疑那段间歇性工作的代码可能是load
上的iframe
处理程序。如果由于浏览器缓存未加载iframe,或者如果在附加加载处理程序之前已经加载了框架的竞争条件,则可能不会触发您的处理程序。
<强>更新强>
埃文的答案是正确的,可能是正确的答案;你应该有负载处理程序的错误处理。但是,如果你发现框架加载没有错误,而是你的处理程序没有被触发:答案 1 :(得分:1)
你可以尝试两件事。我要做的第一件事就是在你的加载函数中添加一个回调函数:
myFrame.load("yourUrl", function(response, status, xhr) {
if (status == "error") {
var msg = "Sorry but there was an error: ";
// do whatever if there is an error
$("#error").html(msg + xhr.status + " " + xhr.statusText);
}
});
如果这对您不起作用,我建议您在代码中使用try catch语句。围绕您认为失败的代码块包装尝试,然后添加一个catch语句,以便您知道是否在该特定块中遇到错误。你也可以throw custom errors告诉你究竟什么是失败的。