2010-07-29 52 views
1

是否有任何屬性或事件我可以從iframe內部偵聽來確定?從iframe內部,如何確定父頁面是否已完成加載?

iframesrc和父頁面位於不同的域。

+0

,如果你有超過父頁面完全控制你應該澄清,或是否必須有這個問題解決了獨立域上的子iframe。 – donohoe 2010-07-30 01:01:24

+0

無法控制父頁面。它必須從iframe中完全解決。 – 2010-07-30 03:13:57

+0

這是一個可以嘗試的黑客攻擊。將父窗口的url加載到iframe中的iframe中。將一個onload事件附加到內部iframe。當它觸發時,父域中的所有內容都已加載,因此可以在某種程度上安全地假定外部頁面已加載。 Kludgy並不是萬無一失的,但它可能會像你一樣接近。 – 2010-08-11 21:11:35

回答

-1

我知道你沒有對父頁面控制,但如果你能說服主機添加一些代碼,你可以做一些這樣的:

//OnParent Page 
<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script> 
<script> 
    var bReady = false; 
    $(document).ready(function() { 
     bReady = true; 
    }); 

    function isReady() { 
     return bReady; 
    } 
</script> 

//in iframe page 
<script> 
    var bReady = false; 
    while (bReady == false) { 
     bReady = window.opener.isReady(); 
    } 
</script> 
4

只有當你也可以修改父頁面。如果你不能,那是XSS並且沒有合法的方法來做到這一點。

parent.html:

... 
<body onload="theFrame.parentLoaded()"> 
... 
<iframe src="http://other.domain.com/frame.html" name="theFrame"></iframe> 
... 

frame.html:*

... 
<script type="text/javascript" language="javascript"> 
function parentLoaded(){ 
    //code here will be executed when the parent page has finished loading 
} 
</script> 
... 
+1

我可以告訴你,我已經從iframe中的父頁面上調用了JavaScript。查看帶有iframe的頁面的源代碼? iframe的全部內容在父頁面內加載。 iframe僅充當沙箱,以防止兩個頁面相互碰撞(將html,css和javascript分開)。但是,它們仍然被加載到相同的瀏覽器窗口中,這留下了一些我們可以利用的循環漏洞。就像調用「window.opener.a_parentFunction()或 top.frames [name] .a_function()」一樣,它們都引用了父項。 – 2010-08-12 13:43:05

+0

這些都不適合我,但我確實找到了一些可行的工具並更新了我的答案。 – qmega 2010-08-14 01:38:35

相關問題