5

JavaScript の JSON をオーバーライドするページで実行する必要があるスクリプトがあるとします。stringify、オーバーライドされたものではなく元のstringifyをコードが使用することをどのように保証しますか?

4

3 に答える 3

6

私は他の答えのいずれかを選択しますが、次の場合の解決策を次に示します。

  1. ページを変更することはできません。
  2. JSON.stringify を上書きするコードの前にコードを実行することはできません。
  3. コードは、元の関数オブジェクトを保存できません(復元するか、後で明示的に使用するため)。

ここにハックがあります:

  1. IFRAME 要素を作成します。
  2. contentWindowIFRAME 要素のプロパティにアクセスします。これには、元の (または「変更されていない新しい」) JSON オブジェクトと、元の JSON.stringify 関数が含まれている必要があります。

ここにjsfiddleがあります

于 2012-09-21T00:24:38.523 に答える
3

ライブラリを作成している場合はJSON.stringify、標準の動作に準拠する必要がある要件にします。

コードに厳密な要件を課すことは何も悪いことではなく、実際には良い考えです。要件を確実に文書化する必要があるだけです。

明らかに、オリジナルが永続的にオーバーライドされている場合、それを使用することはできません。エンド ユーザーに負担を負わせることは、より良い解決策です。

これがライブラリ用ではなく、個人的なプロジェクト用である場合は、適合するメソッドを適合しないメソッドに置き換えるような愚かなことをするサードパーティのコードをロードすることを拒否する必要があります。

于 2012-09-21T00:05:13.933 に答える
1

JSON.stringify上書きされる前にバックアップをとってください。バックアップを作成できない場合は、 shivを使用してください。

于 2012-09-21T00:06:09.297 に答える