2012-09-21 2 views
3

자바 스크립트의 JSON을 재정의하는 페이지에서 실행해야하는 스크립트가 있다고 가정 해 봅시다. stringify, 당신은 어떻게 당신의 코드가 원래의 stringify를 사용하는 것을 보장 하겠는가?JavaScript에서 재정의 된 함수의 원래 상태를 복원하는 방법

+0

당신의 코드를 실행? 나는 변수 (또는이 경우 함수)가 덮어 쓰기되기 전에 거기에 있었던 것을 찾을 수 있는지 심각하게 의심합니다 ... – tucuxi

+1

왜 이것을해야합니까? – Ryan

+1

http://stackoverflow.com/questions/8580431/recovering-built-in-methods-that-have-been-overwritten iframe을 만들고 해당 (새 것, 수정되지 않은) 내용에 액세스 할 수 있습니다. 또한, 귀하의 질문은이 사본과 중복되므로 닫아야합니다. – tucuxi

답변

2

나는 다른 답변 중 하나를 선택하는 것이지만, 여기에 경우에 대한 해결책 경우 :

  1. 따라서 변경 될 수 없습니다 페이지;
  2. 코드 은 012ON_STRING을 덮어 쓰는 코드 앞에을 실행할 수 없습니다.
  3. 코드 원래의 function-object를 저장 (나중에 복원하거나 명시 적으로 사용) 할 수 없습니다.

    1. 는 IFRAME 요소를 만듭니다 여기

    는 해킹이다.

  4. IFRAME 요소의 contentWindow 속성에 액세스하십시오. 여기에는 원본 (또는 "새로운"그대로) JSON 객체와 원본 JSON.stringify 함수가 포함되어야합니다. 다른 코드를 수정할 수있는 기회를 가지고 전에

Here is the jsfiddle

3

라이브러리를 만드는 경우 JSON.stringify이 표준 동작을 따라야한다는 요구 사항을 지정하십시오.

코드에 엄격한 요구 사항을 적용하는 데는 아무런 문제가 없습니다. 실제로는 좋은 생각입니다. 요구 사항을 문서화해야합니다.

원본이 영구적으로 재정의 된 경우 분명히 사용할 수 없습니다. 최종 사용자에게 부담을주는 것이 더 나은 솔루션입니다.

개인 프로젝트의 경우 라이브러리가 아니라 개인 프로젝트의 경우 준수하는 메소드를 부적합한 메소드로 바꾸는 것보다 어리석은 행동을하는 제 3 자 코드를로드하는 것을 거부해야합니다.

+0

+1 게시 한 것과 매우 비슷한 것을 씁니다. –

+1

이것은 우아한 솔루션입니다 ("처음에는이 문제가 없습니다"). 추악한 해결책은 다음과 같습니다. http://stackoverflow.com/questions/8580431/recovering-built-in-methods-that-have-been-overwritten – tucuxi

+0

불행히도 우아한 솔루션은 항상 자바 스크립트에서 옵션이 아닙니다. – w43L

1

덮어 쓰기 전에 JSON.stringify의 백업을 만듭니다. 백업 할 수없는 경우 a shiv을 사용하십시오.

관련 문제