2011-11-21 2 views
6

Chrome에서 몇 가지 실험을했는데 확실하지 않아 확인이 필요합니다.프레임과 iframe에서 자바 스크립트 컨텍스트가 분리되어 있습니까?

iframe과 프레임에 별도의 JavaScript 컨텍스트가있어 해당 프레임간에 변수를 공유 할 수 없다는 점을 수정했습니다./iframe?

단순화하기 위해, 클라이언트는 항상 크롬의 버전이 같아야한다고 가정하자

+0

대답은 "예"이지만 "는 공유 변수"불가능하지 않습니다. 그러나 Internet Explorer는 JavaScript 개체의 계보에 대해 매우 까다 로워서 위험 할 수 있습니다. – Pointy

+0

댓글 대신 답변을 작성해야합니다.) 또한 클라이언트가 항상 Chrome이 될 것이라고 가정 해 봅시다. – Klaim

+0

답이 준비되었습니다. 나는 Chrome이 IE가하는 민감도를 가지고 있다고 생각하지 않지만 100 % 확실하지는 않습니다. 테스트하는 것은 꽤 쉬울 것입니다. – Pointy

답변

8

예 (내 사건).

그러나 frames 컬렉션 또는 parent을 사용하여 다른 프레임에 액세스 할 수 있습니다 (동일한 도메인에서 온 것으로 가정).

1

컨텍스트 분리가 프레임 사이가 아니라 도메인간에 있습니다. 즉, 도메인 A로 프레임 A를로드하고 도메인 B로 프레임 B를로드하면 프레임 A의 Javascript는 도메인 B의 컨텍스트에 액세스 할 수 없습니다. 더 긴 설명은 this을 확인하십시오.

편집 : 물론 동일한 도메인에있는 경우 SLaks에서 제공하는 답변이 완전히 적용됩니다.

6

프레임간에 값을 공유하는 것은 "불가능"하지 않지만주의해야합니다. Internet Explorer에서 다음과 같은 경우 오류가 발생합니다 :

  1. 프레임 B에 (어딘가에 값을 저장 프레임 B의 함수로 자바 스크립트 객체를 전달 프레임 A.
  2. 에서 자바 스크립트 객체를 생성)
  3. 프레임 A는 프레임 B의 코드는 (구) 프레임에서 저장된 객체를 참조하려고
  4. 새로운 페이지를 다시로드 A.는

Internet Explorer가 그것을 좋아하지 않는 경우에서 개체 디펜스 페이지가 참조됩니다.

3

글쎄, 그들은 단지 다른 전역 개체와 전역 범위를 가지고 있습니다. 그러나 동일한 도메인에 있으면 코드를 다른 도메인에서 실행할 수 있습니다. 그러나 만약 당신이 (부모 창 내부)이 작업을 수행하는 경우 :

iframe이 글로벌 범위 내 전역 변수 globalArray를 생성
document.getElementById("myiframe").contentWindow.window.globalArray = []; 

. Array은 iframe 대응의 Array 생성자에 참조하기 때문에

다음은 iframe 내부

console.log(globalArray instanceof Array);

false를 반환합니다. top 컨테이너 창 전역 객체를 참조 어디 있는지

console.log(globalArray instanceof top.Array); 

을해야 할 것입니다.

jsfiddle : http://jsfiddle.net/EFbtN/

관련 문제