2009-09-07 2 views
1

Я использую строгий xhtml на своем веб-сайте, поэтому у меня нет элемента Iframe. Вместо этого я пытаюсь использовать тег объекта.Scripting Object (как замена iframe) в IE делает нечетные вещи

Я хочу, чтобы динамически открытый контент, так что я получил яваскрипт функцию, как это:

<object id="oPageName"> 

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

Если я прохожу в произнесите «SomeFolder/somepage.aspx» для функции openPage, он просто устанавливает содержание на страницу «http://mysite/» - как будто он отрубает оставшуюся часть URL-адреса.

Он отлично работает в FF и Chrome, но не IE 8.

Любые советы по этому странное поведение?

ответ

0

Если я прохожу, скажем, «SomeFolder/somepage.aspx» к функции openPage, он просто устанавливает страницы содержания «http://mysite/»

Вы делаете лучше, чем большинство, тогда. Изменение object.data в IE8 ничего не делает для меня, как и всегда в IE.

В объекте < существует нестандартное свойство объекта, которое предоставляет объект документа внутренней HTML-страницы (как вы ожидали получить от неподдерживаемого свойства contentDocument). Однако, перемещение этой страницы (через object.object.URL или object.object.parentWindow.location) делает то же самое, что и запись в object.data: nothing. (IE, похоже, запутался, если вы посмотрите на object.object.location.href, он на самом деле указывает на родительский URL-адрес, даже если это дочерний документ.)

В принципе, это прослушивание в ад, и вы лучше off забыть < объект> для встраивания HTML сегодня. Проглотите свою гордость и включите iframe, используя Transitional DTD, если вы хотите проверить.

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 имеют свои собственные версии setAttribute(), которые работают вокруг атрибута в IE обработки ошибок.

Смежные вопросы