Internet Explorer 6/7/8。別のフレームでJavascriptを実行する
私はeval()呼び出しを使用して、マルチフレームWebサイト内の特定のフレームのコンテキスト内でコードが実行されるようにしています。
私が持っている状況は、基本的にFrameAのメソッドの完全修飾名をFrameBに渡しているということです。私はその後、FrameBがFrameAの中で上記のメソッドを実行することを望みます。これは、IE内の制限により、そうでない場合は「解放されたスクリプト」エラーを引き起こす可能性があるため、非常に重要です。参照:Can't execute code from a freed script
FrameBは、最初にターゲットフレームオブジェクトを取得するためにevalを使用し、結果のオブジェクトに対してevalを呼び出して、そのフレーム内に存在するメソッドを実行します。だから、FrameB内部から実行する次の点を考慮してください
eval("top.FrameA").eval("SomeMethod(1,2);");
最初のevalは、ウィンドウオブジェクトを返しますが、2番目のevalの呼び出しは、常に「予想オブジェクト」エラーが発生します。
興味深いことに、上記のコードは FrameA内から動作しますが、それは実際には以下のコードを経由してFrameB内部で実行されている:
top.FrameB.eval("eval('top.FrameA').eval('SomeMethod(1,2);');");
だから、問題はevalののネストとは何かを持っていますステートメント。
私はここで何が欠けていますか?
http://www.infimum.dk/HTML/JSwindows.html
私はそれが役に立てば幸い:私はあなたが質問を理解しますが、このページの最後のセクションをチェックアウトする場合
FrameAが再ロードされる可能性があるため、FrameBにその関数へのポインタを含む変数を介してFrameBに関数を実行させようとすると、前述の「解放されたスクリプト」エラーが発生する可能性があります。詳細については、http://stackoverflow.com/questions/8408358/cant-execute-code-from-a-freed-scriptを参照してください。 – RMD