2011-12-10 52 views
1

Tumblr中的照片集作爲iFrames提供。如何檢查是否有一個相同的域,動態加載的iframe我無法控制100%加載?

我想通過jQuery來操作iframe,看看我想要的方式,我可以做到,但它並不總是完成它正在做的事情。

我認爲這是因爲頁面加載時有很多事情同時發生。我需要一種方法來檢查這個我無法控制的iFrame,在我做有趣的事情之前加載100%。

有關於此問題的其他問題中提出了各種技術,但我認爲他們不適合這種情況。這裏是從堆棧溢出問題"jQuery .ready in a dynamically inserted iframe"

function callIframe(url, callback) { 
    $(document.body).append('<IFRAME id="myId" ...>'); 
    $('iframe#myId').attr('src', url); 

    $('iframe#myId').load(function() 
    { 
     callback(this); 
    }); 
} 

一個榜樣,但這毫無意義,我無論如何對我來說,即使它得到打勾,並有100個upvotes。 在這個'答案'中,iframe被函數追加。這對我來說不是一個動態加載的iframe!

這是我用'笨'iframe加載檢查器的代碼。代碼有效,但只是有時。你可以看到它在這裏的行動http://syndex.me(後第三是photoset)

$(".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(){ 
       var newCover=myFrame.contents().find('.photoset').children(':first-child').children(':first-child').attr("href")+ '?'+(Math.random()*10000); 
       post_relative.append("<img src='"+ newCover +"' alt='Cover Page' />"); 
       var psHeight = post_relative.find('img'); 
       psHeight.load(function(){ 
       if (psHeight.height()>heightRef){ 
        psHeight.height(heightRef); 
      } 
       myFrame.hide(); 
      }) 
     }) 
     } 
    }); 

所以現在的問題是:你如何執行基於100%負載和準備的iframe的腳本?

回答

1

您使用onload事件將數據寫入每個幀的上下文之外。你有兩個選擇:

  • 餅乾
  • localStorage的

二是要優越得多的解決方案,但它不支持IE7。如果它位於同一架構,域和端口中,則可以從兩個框架訪問這些項目。

+0

我不需要用IE7用戶費心。仔細闡述在這種情況下如何實現?這是一個相當抽象的答案!我會在此期間嘗試谷歌。 – RGBK

+0

在iframe窗口中添加如下內容到body標籤:onload =「localStorage.setItem('frameload',window.location.href)」;然後在覈心窗口中編寫一些邏輯來使用localStorage.getItem(「frameload」)查找該項目; – austincheney

+0

這是一個很好的答案。我已經搞亂了設置document.domain來達到這個目的,但是你的解決方案更清潔,更簡單。 – NolanDC

-1

如果您使用jQuery你試過

$("#iFrameId").load(function(){ 
    // do something once the iframe is loaded 
}); 
+0

這就是我正在做的。它雖然不起作用。 – RGBK