2012-04-26 63 views
0

我在IE8中發現了一個我無法弄清的錯誤。我試圖從iframe外調用iframe中的函數。代碼的結果是「對象不支持此屬性或方法」。這裏是代碼:在IE8中從iframe外部調用iframe中的函數

<html><head> 

<script type="text/javascript"> 
    setTimeout(function() { 
    document.getElementById('mypage').contentWindow.MyFunction('myVar') }, 10000); 

</script> 

</head><body> 

..... 

<iframe id="mypage" src="myfile.php"> 

<script type="text/javascript"> 
    function MyFunction(myvar) { 
      ..... 
    } 
</script> 

</iframe> 

..... 

</body></html> 
+0

你確定你的框架已經加載,當你的JavaScript執行? (也可能只是一個錯誤類型,但你需要MyFunction的「函數」) – aepheus 2012-04-26 22:03:30

+0

同意aepheus,你可以在某些事件中調用子窗口函數,或者延遲調用以檢查函數調用是否在加載的iframe上工作。 – Biswanath 2012-04-26 22:07:11

+0

我也嘗試過用setTimeout來達到這個目的,但它仍然不能用10秒的延遲 – 2012-04-26 22:10:49

回答

1

您的JavaScript將在iframe甚至知道之前執行,更不用說加載。嘗試添加您的JavaScript到iframe的加載事件,而不是直接調用它。你也必須在dom中做好準備,以確保iframe已經加載到dom。

喜歡的東西(原諒了jQuery,但它是我所知道的):

$(document).ready(function(){ 
    $('#mypage').load(function(){ 
     document.getElementById('mypage').contentWindow.MyFunction('myVar'); 
    }); 
}); 

而最後一個音符,這可能會或可能不會需要(取決於你的頁面比什麼都重要的)。如果腳本加載緩慢,或者在框架的頁面加載週期後期加載,則可能需要setInterval以測試它是否已加載。您基本上需要確保在創建它的JavaScript執行後調用該函數。