분리된 경우 창 개체 속성이 지워짐

창이 분리될 때 전역 개체(window)의 속성이 지워집니다. 추가 참조가 발견되지 않을 경우 분리된 창의 가비지 수집이 가능하도록 속성이 지워집니다. 또한 타이머 실행이 중지되고 이벤트 전파(분리된 창 내에서)가 즉시 중지됩니다. 이 항목을 이해하는 데 다음 정의가 도움이 됩니다.

임시 iFrame: 구문 분석되거나 DOM 트리에서 일시적으로 생성, 추가된 후 제거되며 다시 사용되지 않는 iFrame을 "임시" iFrame이라고 합니다.

분리된 창: 임시 iFrame이 DOM 트리에서 제거되면 해당 창은 닫힐 때까지 "분리된"(활성 상태지만 직접 도달할 수 없음) 것으로 간주됩니다.

IE9 표준 모드에서 iFrame 동작의 변경 사항

iFrame 요소가 DOM 트리에서 제거되면 몇몇 현상이 발생합니다.

  • 분리된 창의 가비지 수집이 가능하도록 분리된 window 개체가 "지워집니다." 지워진 window 개체(즉, 전역 개체)에 대해서는 어떤 속성도 표시되지 않습니다. 지워진다는 것은 window 개체에서 속성이 제거되는 것이지, 이러한 속성이 이전에 참조한 개체가 실제로 삭제되는 것은 아닙니다. 따라서 개체에 대한 또 다른 외부 참조가 있는 경우에만, 분리된 창에 있는 기본 제공 개체 또는 사용자 정의 개체에 도달할 수 있습니다.
  • 기존 타이머(예: setTimeout)는 취소되며, 타이머를 더 이상 실행할 수 없습니다.
  • 분리되는 창 내에서 진행 중이던 이벤트 전파는 중지됩니다(예를 들어, 관련 이벤트에서 stopImmediatePropagation API가 호출된 것처럼).
이는 임시 iFrame의 창이 분리되었을 때 위 단계 중 어떤 것도 발생하지 않던 Windows Internet Explorer 8 동작에서 변경된 사항입니다. 이러한 동작 변경은 IE9 모드에만 적용됩니다. 기존 모드는 Internet Explorer 8과 동일하게 작동합니다.

Windows Internet Explorer 이전 버전(기존 Windows Internet Explorer 9 문서 모드 포함)에서는 iFrame이 DOM 트리에서 제거되면, 분리된 창에 대한 메모리가 페이지 탐색 시에만 회수되었습니다. 페이지 탐색 전에는 분리된 창의 메모리가 가비지 수집되지 않은 채 지속되었습니다. 드물기는 하지만, 페이지 탐색에 영향을 주지 않은 채 콘텐츠를 다운로드 또는 실행하기 위해 사이트에서 여러 개의 임시 iFrame을 사용하는 경우, 분리된 각 창의 메모리 양이 누적되어 사용자의 페이지 사용 환경에 부정적인 영향을 줄 수 있습니다. 분리된 창 내의 개체에 대한 기존 참조는 계속 사용 가능하지만, 전역 개체를 통해 이러한 속성을 다시 요청하면 실패하게 됩니다. "myRequestedProperty"가 없거나 정의되지 않은 경우, 실패는 스크립트 오류로 표시됩니다.

다음과 같이 하는 것이 좋습니다.

  • 분리된 창에서 요청하는 개체에는 기존 참조(분리된 창 외부로부터)를 두어 도달 가능하도록 설정하고, 분리된 창의 컨텍스트에서 실행되는 함수에서는 전역 개체(예: Array, Object)로부터의 속성을 참조하지 않습니다.
  • 타이머 실행이 예상되는 코드는 창이 분리될 가능성에 대비해야 합니다(그 결과 기존 타이머 취소).
  • 포함된 iFrame을 제거할 부작용이 있는 이벤트 처리기는 창이 분리될 가능성에 대비해야 합니다(그 결과 현재 전파되는 이벤트의 stopImmediatePropagation 발생).

관련 항목

stopImmediatePropagation API 관련 세부 정보

 

 

표시:
© 2015 Microsoft