2011-12-06 32 views
2

私は、別のフレームで上書きする必要のある機能を持っています。さらに、私はオーバーライド内から元の関数を呼び出す必要があります。そうするために、私は以下を使用しています:私はこのコードを実行すると解放されたスクリプトからコードを実行できません

myFrame.SomeFunction = (function() { 
    var originalSomeFunction = myFrame.SomeFunction; 

    return function(arg1, arg2, arg3) { 
     alert('In override!'); 
     originalSomeFunction(arg1, arg2, arg3); 
    }; 
})(); 

、私は「解放されたスクリプトからコードを実行できません」を取得します。

思考?これを行うより良い方法はありますか? IE 6,7,8,9でテストしてください。

+0

は、FF、Chrome、IEでうまく動作します。どのブラウザでこれを実行していますか?あなたのコードの中にこれを引き起こしている他の部分かもしれません.. –

+1

あなたがそれにアクセスしようとするとき、フレームはおそらく存在しなくなります。参照してください:http://stackoverflow.com/questions/83132/what-c​​auses-the-error-cant-execute-code-from-a-freed-script –

+0

私は**自由なスクリプト'を意味する! – Pierre

答えて

2

解決策を見つけました。

基本的には、以前に投稿したすべてのコードを取得し、eval()関数を使用してターゲットフレームのコンテキスト内から実行します。だから... ...コードは、ターゲットフレーム内今

myFrame.eval("SomeFunction = (function() {var originalSomeFunction = SomeFunction; return function (arg1, arg2, arg2) {alert('Inside override!'); originalSomeFunction(arg1, arg2, arg3);};})();"); 

ので、スコープの外に出ていない、と私たちはもう、「解放された」エラーを得ることはありません。

4

IEでこれを行うことはできません。フレーム間で渡すオブジェクトは、文字列などのネイティブなものであることを確認する必要があります。たとえ "Date"インスタンスでさえ私の問題を引き起こしましたが、これはWindows 2000のあいまいなバージョンのものでした。

「フリー・スクリプト」とは、オブジェクトが「生まれた」ページ・コンテキストが新しいページによって上書きされたことを意味します。

+0

から見つけたIEの別のフレームで関数をオーバーライドする方法はありません?奇妙なのは、関数ポインタを保持するために "myFrame"内の変数を使用しても、私はまだこのエラーが発生するということです。 – RMD

+0

はい、できますが、別のページで生まれた「古い」オブジェクトがあると問題が発生します。あなたのコードがそれに触れようとすると、IEはそのプロトタイプオブジェクト(と等)がなくなったことを認識します。これは、JScriptの仕組みがうまくいくようにする方法です。 – Pointy

+0

私のコードで「古い」オブジェクトを表すものは何ですか?これを防ぐためにこのコードを変更するにはどうすればよいですか? – RMD

2

は、Googleからここに来ているとIEでこの問題を解決するために簡単な解決策を探している場合:

我々の場合には、我々は、アイフレームを挟んイベントで働いていたので、問題は、発生しました。これにより、トリガーされたイベントと組み合わされたiframeコンテンツを変更すると、今変更されたiframeドキュメント上でスクリプトを呼び出そうとする可能性がありました。これは問題の例外を提起した。問題が提起されなくなり

$(window).on("unload", function(){ 
    $(target).off(eventname, handler); 
}); 

を追加することにより、

。 IEのために最終的にtry/catchはありません。

+0

'handler'はオプションです。ターゲット要素のすべてのjQueryクリックハンドラをクリアできる場合は、' .off( 'click') 'を実行することができます。 – Stan

関連する問題