JavaScript를 사용하여 <iframe> 요소를 만들고 DOM에 추가해야하는 프로젝트가 있습니다. 그런 다음 <iframe>에 콘텐츠를 삽입해야합니다. 제 3 자 웹 사이트에 삽입 될 위젯입니다.
페이지를로드하고 싶지 않기 때문에 <iframe>의 "src"속성을 설정하지 않았습니다. 오히려 CSS 또는 JavaScript가 상위 페이지와 충돌하지 않도록 삽입하는 콘텐츠를 격리 / 샌드 박스하는 데 사용됩니다. JSONP를 사용하여 서버에서 일부 HTML 콘텐츠를로드하고이 <iframe>에 삽입합니다.
한 가지 심각한 예외를 제외하고 잘 작동합니다. 6, 7, 8에서 확인) 내가 만든이 <iframe>의 문서 개체에 액세스하려고하면 "액세스가 거부되었습니다."오류가 발생합니다. 내가 테스트 한 다른 브라우저 (모든 주요 최신 브라우저)에서는 발생하지 않습니다.
Internet Explorer에서 서로 통신 할 모든 창 / 프레임의 document.domain을 동일한 값으로 설정해야한다는 것을 알고 있기 때문에 이것은 어느 정도 의미가 있습니다. 그러나 액세스 할 수없는 문서에이 값을 설정하는 방법을 모릅니다.
이 작업을 수행하는 방법을 알고있는 사람이 있습니까?-어떻게 든 동적으로 생성 된 <iframe>의 document.domain 속성을 설정합니까? 아니면 나는 그것을 직각으로 보지 않고 있습니까?이 문제에 부딪히지 않고 내가 원하는 것을 달성하는 다른 방법이 있습니까? 격리 / 샌드 박스 창은이 위젯의 기능에 중요하기 때문에 어떤 경우에도 <iframe>을 사용해야합니다.
내 테스트 코드는 다음과 같습니다.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Document.domain Test</title>
<script type="text/javascript">
document.domain = 'onespot.com'; // set the page's document.domain
</script>
</head>
<body>
<p>This is a paragraph above the <iframe>.</p>
<div id="placeholder"></div>
<p>This is a paragraph below the <iframe>.</p>
<script type="text/javascript">
var iframe = document.createElement('iframe'), doc; // create <iframe> element
document.getElementById('placeholder').appendChild(iframe); // append <iframe> element to the placeholder element
setTimeout(function() { // set a timeout to give browsers a chance to recognize the <iframe>
doc = iframe.contentWindow || iframe.contentDocument; // get a handle on the <iframe> document
alert(doc);
if (doc.document) { // HEREIN LIES THE PROBLEM
doc = doc.document;
}
doc.body.innerHTML = '<h1>Hello!</h1>'; // add an element
}, 10);
</script>
</body>
</html>
나는 그것을 호스팅했습니다 :
http://troy.onespot.com/static/access_denied.html
IE에서이 페이지를로드하면 알 수 있듯이 alert ()를 호출 할 때 <iframe>의 창 개체에 대한 핸들이 있습니다. 문서 객체에 대해 더 깊이 이해할 수 없습니다.
도움이나 제안에 감사드립니다! 나는 이것에 대한 해결책을 찾는 데 도움을 줄 수있는 사람에게 빚을 질 것이다.