2011-12-07 13 views
2

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

私はそれが役に立てば幸い:私はあなたが質問を理解しますが、このページの最後のセクションをチェックアウトする場合

答えて

0

は、私は100%明確ではありませんよ。

+0

FrameAが再ロードされる可能性があるため、FrameBにその関数へのポインタを含む変数を介してFrameBに関数を実行させようとすると、前述の「解放されたスクリプト」エラーが発生する可能性があります。詳細については、http://stackoverflow.com/questions/8408358/cant-execute-code-from-a-freed-scriptを参照してください。 – RMD

関連する問題