2009-09-07 5 views
1

내 웹 사이트에서 엄격한 xhtml을 사용하고 있으므로 "Iframe"요소가 없습니다. 대신 object 태그를 사용하려고합니다. IE의 스크립트 객체 (iframe 교체)가 이상한 작업을 수행합니다.

는 동적으로 개방 내용에 원하는, 그래서 나는 다음과 같은 자바 스크립트 함수를 가지고 :

<object id="oPageName"> 

<script> 
    function openPage(pageName) { 
     var ifContent = document.getElementById("oPageName");    
     ifContent.data = pageName; 
    } 
</script> 

내가에서 통과 openPage의 기능을 "someFolder/somepage.aspx"를 말한다면, 그것은 단순히 내용을 설정 페이지의 URL을 "http://mysite/"으로 변경하면 URL의 나머지 부분이 잘리는 것처럼 보입니다.

그것은 FF와 크롬에서 잘 작동,하지만 IE 8

이 이상한 행동에 대한 모든 팁?

답변

0

내가 openPage의 기능을 "someFolder/somepage.aspx"말에 전달하면, 그것은 단순히 "http://mysite/"

당신은 대부분의보다 더 나은 일을하는지는 다음 콘텐츠 페이지를 설정합니다. IE8에서 object.data를 변경하는 것은 IE 에서처럼 항상 나를 위해 아무것도하지 않습니다.

IE의 < object>에 비표준 'object'속성이 있습니다. 이는 지원되지 않는 contentDocument 속성에서 가져올 것으로 예상되는 것처럼 내부 HTML 페이지의 문서 객체를 제공합니다. 그러나 object.object.URL 또는 object.object.parentWindow.location을 통해 해당 페이지를 탐색하면 object.data에 쓰는 것과 동일하게 수행됩니다. (IE는 혼란스러워 보이는데, object.object.location.href를 보면 자식 문서 임에도 불구하고 부모 URL을 가리킨다.)

기본적으로 지옥에 도청되어 있으며 끄기 < 개체>를 오늘 HTML 임베딩을 위해 잊었습니다. 유효성을 검사하려면 전환 DTD를 사용하여 자존심을 삼켜 iframe을 포함시킵니다.

0

이전 버전의 IE (IE8에 대해 알지 못함)에서는 특정 요소 유형의 특정 속성이 한 번 (프로그래밍 방식으로 또는 다른 방식으로) 설정되면 변경되지 않습니다. 나는 object과 모든 양식 요소 (input, textarea 등)가 이런 식으로 행동한다고 ​​믿습니다.

나는이 문제를 해결하는 더 우아한 방법이있을거야,하지만 당신은 (안된)이 같은 시도 할 수 :

function openPage(pageName) { 
    var ifContent = document.getElementById("oPageName"); 
    try { 
     ifContent.setAttribute('data', pageName); 
    catch (e) { // catch immutable attribute error 

     // create a new object and replace the old one 
     var o = document.createElement('object'); 
     o.setAttribute('name', pageName); 
     ifContent.parentNode.replaceChild(o, ifContent); 
    } 
} 

대부분의 JS의 framworks는 IE의 속성 주위에 작동하는 setAttribute()의 자신의 버전이를 버그 처리.

관련 문제