2011-12-07 44 views
0

我有一個圖像/媒體tumblr的第一頁上加載12-25圖像,它有可能是相當大的。如何重新啓動一個功能,如果它不是第一次工作?

我有jQuery做佈局和圖像的各種美容東西,特別是,我檢查每個帖子,看看它是否是一個photoset,它是由Tumblr作爲iframe服務。

從視覺上看,可以看到photoset的縮略圖預覽圖庫,當您單擊縮略圖時,它會打開一張包含全尺寸照片的lightbox幻燈片。

我的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

如果它不工作,第三個職位將是這樣的: wrong

如果它工作正常,將是這樣的: right

回答

1

我懷疑那段間歇性工作的代碼可能是load處理程序iframe。如果由於瀏覽器緩存而未加載iframe,或者在加載處理程序已連接之前已經加載幀的競爭條件已滿,則可能不會觸發您的處理程序。

更新

埃文的回答是點上,可能是正確的;你應該爲你的負載處理程序進行錯誤處理。但是,如果您發現該架裝載不示數出來的,而是你的處理程序沒有被觸發:

  1. 如果這是由於競爭條件,確保你重新設計你的代碼,以便在將幀插入DOM之前附加事件處理程序。
  2. 如果這是由於緩存造成的,請在框架的URL上添加一些內容以確保它們始終是唯一的。
+0

我猜測它可能是代碼的一部分。我怎樣才能讓這個更堅實?也許通過埃文的回答? – RGBK

+1

@埃文的答案很好,因爲你還需要iframe加載的錯誤處理。事實上,也許這是你唯一的問題。如果你確定一個框架加載沒有錯誤,並沒有觸發你的處理程序,那麼我的答案更相關。 – Jacob

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給你一個想法究竟是什麼失敗。

+0

我從來沒有見過使用iframe的.load的ajax簽名......這是否會產生與更改iframe元素的src屬性相同的結果?它可以與x-domain url一起使用,比如tumblr嗎? –

+0

我會在今天晚些時候看一看,並告訴你。謝謝。 – RGBK

+0

我已經添加了嘗試並捕獲代碼的每一行,但沒有控制檯日誌,我做錯了什麼?當然這會找到罪魁禍首。 http://marckremers.com/syndex/js/private.js – RGBK

相關問題