2009-11-03 3 views
5

나는이 문제에 관해 인터넷 조사를 한 달간을 보냈으며 아직 이에 대한 답을 찾지 못했다. 내 코드는 다음을 수행합니다 (모든 자바 스크립트).Document.Domain madness

의 내가

  1. 내가 document.domain을 설정 헤드 부분에 매우 먼저 = 'mydomain.com'mydomain.com에 test.html를 있다고 가정 해 봅시다;

  2. 그런 다음, 동적으로 설정 SRC를 iframe 대응을 만드는 "subdomain.mydomain.com/test2.html"DOM

  3. subdomain.mydomain.com/test2.html에

  4. 추가]은 iframe에 : 매우 헤드 섹션의 첫 번째 항목 : document.domain = 'mydomain.com';

  5. test2.html는 window.parent 모든 브라우저에서

작품을 통해 부모와 통신을 시도 on_dom_ready 이벤트가 있습니다. IE6에서도! 유일한 문제는 IE에서 페이지를 새로 고침 할 때 액세스가 거부 된 오류가 발생합니다.

이 오류를 제거하는 유일한 방법은 window.parent를 호출하기 전에 12 초 동안 기다리는 것입니다. 심지어 5 초 도움이되지 않는다, 나는 literarely 12 초를 기다려야한다. 나에게 의미가 없다.

누구나이 경험이 있습니까?

+0

IE7과 IE8 또는 IE6에서이 문제가 있습니까? –

+0

IE 7과 IE6 둘 다 IE8에서 테스트하지 않았습니다 – Gotys

+0

새로 고침을 사용하면 F5를 누르거나 URL 영역을 클릭하고 입력 할 수 있습니다. 이들은 리로드의 두 가지 "스타일"을 유발하는데, 하나는 캐시에 100 %를 기록하고, 다른 하나는 서버가 마지막으로 수정 한 시간을 확인합니다. F5를 사용하여 새로 고침 할 때만 오류가 표시되는 경우 URL 창에 커서를 놓고 Enter 키를 눌러 새로 고침하십시오. – jvenema

답변

2

부모 프레임의 onload 이벤트가 아직 트리거되지 않아 DOM이 완전히 빌드되지 않았기 때문입니다. 여기가있을 때까지 간격으로 사업부를 검색하는 kludge은 폭파하지 않고있다 :

var minmax_SCANDELAY= 500; 
var minmax_scanner; 

function minmax_scan() { 
    if (!window.parent.document.getElementById('content')) return; 
    window.clearInterval(minmax_scanner); 

    //replace following function call with your own. 
    doYourMagicHere(); 
} 

minmax_scan(); 
minmax_scanner= window.setInterval(minmax_scan, minmax_SCANDELAY); 
+0

정말 고마워요! 이것은 유용한 정보입니다. 그 간격은 시간 제한 대신에 좋은 생각인데, 나는 window.parent 조건을 try/catch 문으로 감싸 줘야했다. 왜냐하면 나에게 오류가 거부 된 권한을 던지고 있었기 때문이다. 그러나 가장 크고 이상한 문제는 window.parent가 부모 프레임에서 사용 가능하게되기까지 실제로 10 초가 걸린다는 것입니다.나는 on_load_ready 이벤트를 on_loads로 바꿨다. 다시 한 번 강조하고 싶습니다. 새로 고침을 한 후에 페이지의 첫 번째로드가 발생하지 않습니다. 어떤 생각? – Gotys

0

몰래의 대답은 나에게 많은 도움이! 그는 onload 이벤트가 실제로 문제라는 사실에 대해 100 % 정확했습니다. 난 내 코드에 더 깊이 검토 한 나는 자식은 iframe을 만들기 전에, 내가 아래 기술로 지연로드에게 약간의 스크립트임을 발견 :

lazy_load: function(url,on_finish_function) 
{ 
    var head = document.getElementsByTagName("head")[0]; 
    var script = document.createElement("script"); 
    script.src = url; 
    var done = false; 

    var This = this; 
    // Attach handlers for all browsers 
    script.onload = script.onreadystatechange = function() 
    { 
     if (!done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")) 
     { 
      done = true; 
      on_finish_function.call(This,null); 
      head.removeChild(script); 
     } 
    }; 
    head.appendChild(script); 
}, 

위의 기능은 문서의 HEAD 부분을 수정합니다. 이 lazy_load 함수에서 자식 iframe이 on_finish에서 생성됩니다.

내 생각에 IE 브라우저가 실제로 이걸 두려워하고 다음과 같이 문서를 수정하는 데 걸린 충격을 복구하는 데 12 초가 걸렸습니다.이 문제에 대해 어떻게 할 수 있습니까? IE가 lazy_load DOM 조작에서 복구하기 위해 오래 걸리는 이유는 무엇입니까?

+0

head.removeChild (script); 내 onload 이벤트 내부 문제가 발생했습니다. 문제가 해결되었습니다. – Gotys

관련 문제