2012-04-26 121 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执行后调用该函数。