2012-04-26 16 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には "function"が必要です) – aepheus

+0

aepheusに同意すると、何らかのイベントで子ウィンドウ関数を呼び出すか、関数呼び出しが読み込まれたiframeで機能しているかどうかを確認する遅延呼び出しを呼び出せますか? – Biswanath

+0

私はその目的のためにsetTimeoutで試してみましたが、それでも10秒の遅延では動作しませんでした –

答えて

1

のiframeをしてもロードおろか、知られている前に、あなたのjavascriptがうまく実行されます。直接呼び出すのではなく、iframeのloadイベントにJavaScriptを追加してみてください。また、iframeがdomにロードされていることを保証するために、domでこれを行う必要があります。

のようなもの(jQueryのを言い訳が、それは私が知っているものだ):

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

そして最後のノート、これはか(何よりもあなたのページに応じて)必要とされないことがあります。スクリプトの読み込みが遅くなったり、フレームのページロードサイクルの後半に読み込まれたりする場合は、まだロードされているかどうかをテストするためにsetIntervalを設定する必要があります。基本的には、それを作成するjavascriptが実行された後で関数を呼び出すことを保証する必要があります。