2011-03-02 32 views
1

我的目標是讓一個父頁面將iframe的src從空白更改爲其正確的url(就像在給定點處使用iframe中的onload處理程序,但除此之外),然後處理iframe的內容。但是,JavaScript似乎忘記了DOM加載時不在其src中的任何iframe元素。有沒有辦法解決?可以設置一個iframe的src,然後處理它的內容嗎?

setTimeouts旨在允許加載DOM和iframe。 編輯:修正了一些東西。 這裏是包含頁:

<html><head> 
    <script type="text/javascript"> 
     var done = false; 
     var theIframe; 
     window.onload = function() { 
      setTimeout('stuff()', 2000); 
      clearTimeout('stuff()'); 
     } 

     function stuff() { 
      if (!done) { 
       theIframe = window.myiframe; 
       theIframe.src = 'http://localhost/TestStuff/redirectIframe.jsp'; 
       done = true; 
       stuff(); 
      } else { 
       theIframe.setMe = true; 
      } 
     } 

     </script> 
</head> 
     <body> 
     <iframe src="" width="500" height="500" id="myiframe" name="myiframe"> 

     </iframe> 
     </body> 

而這裏的IFRAME:

<html> 
    <head> 
    <script type="text/javascript"> 
     var setMe = false; 
     window.onload = setInterval('checker()', 1000); 
     function checker() { 
      alert('hi'); 
      if (setMe) { 
       window.onload = null; 
       top.location = 'http://www.google.com'; 
       alert('foundit'); 
      } else alert('a'); 

     } 

    </script> 
    </head> 
    <body></body> 
</html> 

任何想法?

回答

0

在這段代碼:

theIframe.src = ...; 
stuff(); 

你立即調用stuff(),相反你所描述的東西,所以其實你不允許任何時間頁面加載。也許你對setTimeout的工作方式感到困惑:它只是在指定的時間之後安排一次執行,它不會自動延遲對函數的所有調用。

此外,您只能使用clearTimeout以及setTimeout返回的以前的ID,而不是現在的代碼。

嘗試這樣:

window.onload = function() { 
    loadFrame(); 
} 

function loadFrame() { 
    theIframe = ...; 
    theIframe.src = ...; 
    setTimeout(setSomething, 2000); 
} 

function setSomething() { 
    theIframe.setMe = true; 
} 
+0

呀,沒有太多指向該遞歸我想。儘管如此,雖然在更改src之後,Iframe.contentWindow未定義。 – Amalgovinus 2011-03-02 17:25:43

+0

@Rujiel:這很奇怪 - 如果頁面確實已經完成加載,則不應該發生這種情況。 – casablanca 2011-03-02 17:28:42

+0

如果必須先修改src,則無法訪問iframe中的任何js。似乎只有DOM將在iframe refesh上更新,並且iframe上的js不會被考慮在內? – Amalgovinus 2011-03-02 17:58:55

相關問題