Javascript 从IE8中的iframe外部调用iframe内部的函数

Javascript 从IE8中的iframe外部调用iframe内部的函数,javascript,iframe,internet-explorer-8,Javascript,Iframe,Internet Explorer 8,我在IE8中有一个我无法理解的错误。我试图从iframe外部调用iframe内部的函数。代码的结果是“对象不支持此属性或方法”。代码如下: <html><head> <script type="text/javascript"> setTimeout(function () { document.getElementById('mypage').contentWindow.MyFunction('myVar') }, 10000);

我在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>

setTimeout(函数(){
document.getElementById('mypage').contentWindow.MyFunction('myVar')},10000);
.....
函数MyFunction(myvar){
.....
}
.....

您的javascript将在iframe已知之前执行,更不用说加载了。尝试将javascript添加到iframe的加载事件中,而不是直接调用它。您还必须在dom中执行此操作,以确保iframe已加载到dom中

比如(请原谅jQuery,但这是我所知道的):


最后一点,这可能是必需的,也可能不是必需的(取决于您的页面而非其他内容)。如果脚本加载缓慢,或者在帧的页面加载周期中加载较晚,则可能需要设置Interval以测试脚本是否已加载。基本上,您需要确保在创建函数的javascript执行后调用该函数。

您确定在javascript执行时已加载框架吗?(也可能只是输入错误,但您需要MyFunction的“function”)同意aepheus的说法,您可以在某些事件中调用子窗口函数,或者延迟调用以检查函数调用是否在加载的iframe上工作。为此,我也尝试了setTimeout,但延迟10秒仍然不起作用
$(document).ready(function(){
    $('#mypage').load(function(){
       document.getElementById('mypage').contentWindow.MyFunction('myVar');
    });
});