Chrome에서 몇 가지 실험을했는데 확실하지 않아 확인이 필요합니다.프레임과 iframe에서 자바 스크립트 컨텍스트가 분리되어 있습니까?
iframe과 프레임에 별도의 JavaScript 컨텍스트가있어 해당 프레임간에 변수를 공유 할 수 없다는 점을 수정했습니다./iframe?
단순화하기 위해, 클라이언트는 항상 크롬의 버전이 같아야한다고 가정하자
Chrome에서 몇 가지 실험을했는데 확실하지 않아 확인이 필요합니다.프레임과 iframe에서 자바 스크립트 컨텍스트가 분리되어 있습니까?
iframe과 프레임에 별도의 JavaScript 컨텍스트가있어 해당 프레임간에 변수를 공유 할 수 없다는 점을 수정했습니다./iframe?
단순화하기 위해, 클라이언트는 항상 크롬의 버전이 같아야한다고 가정하자
예 (내 사건).
그러나 frames
컬렉션 또는 parent
을 사용하여 다른 프레임에 액세스 할 수 있습니다 (동일한 도메인에서 온 것으로 가정).
컨텍스트 분리가 프레임 사이가 아니라 도메인간에 있습니다. 즉, 도메인 A로 프레임 A를로드하고 도메인 B로 프레임 B를로드하면 프레임 A의 Javascript는 도메인 B의 컨텍스트에 액세스 할 수 없습니다. 더 긴 설명은 this을 확인하십시오.
편집 : 물론 동일한 도메인에있는 경우 SLaks에서 제공하는 답변이 완전히 적용됩니다.
프레임간에 값을 공유하는 것은 "불가능"하지 않지만주의해야합니다. Internet Explorer에서 다음과 같은 경우 오류가 발생합니다 :
Internet Explorer가 그것을 좋아하지 않는 경우에서 개체 디펜스 페이지가 참조됩니다.
글쎄, 그들은 단지 다른 전역 개체와 전역 범위를 가지고 있습니다. 그러나 동일한 도메인에 있으면 코드를 다른 도메인에서 실행할 수 있습니다. 그러나 만약 당신이 (부모 창 내부)이 작업을 수행하는 경우 :
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/
대답은 "예"이지만 "는 공유 변수"불가능하지 않습니다. 그러나 Internet Explorer는 JavaScript 개체의 계보에 대해 매우 까다 로워서 위험 할 수 있습니다. – Pointy
댓글 대신 답변을 작성해야합니다.) 또한 클라이언트가 항상 Chrome이 될 것이라고 가정 해 봅시다. – Klaim
답이 준비되었습니다. 나는 Chrome이 IE가하는 민감도를 가지고 있다고 생각하지 않지만 100 % 확실하지는 않습니다. 테스트하는 것은 꽤 쉬울 것입니다. – Pointy