2012-01-20 21 views
2

date.getHours()などのメソッドまたはdate.getFullYear()などのメソッドにDateオブジェクトを渡し、エラー"Can't execute code from a freed script"をスローします。 IE9は日付ピッカーが使用する日付オブジェクトを適切にサポートしていないようです。IE9でdate.getHours()を呼び出すときに「解放されたスクリプトからコードを実行できません」

私はJavaScript /一般的なコーディングに新しく、IE9でのみ発生するような問題がありました。

if (date.getHours()=="undefined") { 
    var localDate = new Date(date); 
    var hours = localDate.getHours(); 
    // etc 
} 

I:私は完全に間違った方法でそれを解決についてしまったかもしれないように私は、次のような、私はこの問題を解決するために、様々な異なるものを試してみました

...このことについて皆に警告しています今は解決策がありますが(それは最善ではないかもしれませんが、それは仕事です)、それを下に投稿しますが、他の誰かが同じ問題に遭遇したか、どうやって解決したかを知りたいと思います。

+0

あなたはhttp://stackoverflow.com/questions/83132/what-c​​auses-the-error-cant-execute-code-from-a-freed-scriptを読んでいましたか? – user123444555621

答えて

3

私の経験では、取得したDateオブジェクトが別のウィンドウで構築されているため、別のウィンドウが閉じられているか、新しいページで再ロードされているなどの問題が発生します。

解決策は、オブジェクトのインターウィンドウを文字列形式で送信し、宛先コンテキストで必要に応じてオブジェクトを再構成することです。

(それはもちろんのちょうどDateインスタンスではなく、任意のオブジェクト型の私が思い出すならばプリミティブは、問題はありません。)以下のように

+0

ありがとうPointy、これは多く説明します!私はまだ私が新しいユーザーであるので、私のソリューションを投稿することはできませんので、8時間待たなければなりませんが、私はdate.gethours()を呼び出す新しいメソッドでtry catchブロックを使用し、私は渡された日付を持つ新しいDateオブジェクトを再構成しました。これは、ユーザーがどのブラウザを使用していたか心配する必要がないことを意味しました。これはソリューションを実装するための適切なアプローチですか? –

+0

確かに、それは動作します。あるいは、元のDateで '.getTime()'を呼び出して、受信ウィンドウのコンテキストで新しいDateTimeを構築することもできます。 – Pointy

0

私の解決策だった...

I

date = getValidDate(date); 
:私は、元の問題の影響を受けた任意の方法で getValidDate()と呼ば

function getValidDate(date) { 
    try { 
     date.getHours(); 
     return date; 
    } catch (e) { 
     return new Date(date); 
    } 
} 

:新しいメソッドを作成しました

これはPointyと記述されていますが、メソッドに渡された元の日付で作成された新しいDateが返されました。この新しい日付には、getHours()getFullYear()などの任意のメソッドを呼び出すことができました。

私はプログラミングの世界では新しいので、これは簡単に思えるかもしれませんが、同様の状況にある場合、これは他の人に役立つことを願っています。

関連する問題