Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Загрузка xml в iframe - проблема в IE. (Вадим Макишвили, оценка: 2)
Author Message
Вадим Макишвили
Заглянувший



Joined: 04 Mar 2005
Posts: 4
Карма: 0
   поощрить/наказать


PostPosted: Thu Jun 02, 2005 7:24 pm (написано за 25 минут 44 секунды)
   Post subject: Загрузка xml в iframe - проблема в IE
Reply with quote

Здравствуйте.
Я заинтересовался объектом XMLHttpRequest и успешно использовал этот объект для javascript-трансформации xml-дерева в html-структуру меню. Решение выглядит так:
1. В xml-файле храню структуру навигационного дерева для сайта.
2. В html-файле использую XMLHttpRequest объект (и его Active X аналогию), чтобы javascript и DOM-методами получать последовательно все элементы xml-файла и генерить обычную html-таблицу, представлющую меню навигации. Работает в ИЕ и в Gecko-браузерах. С удивлением обнаружил, что Opera 8.0 тоже поддерживает XMLHttpRequest-объект.

Прекрасная технология. Дай Бог ей стандартизации и дальнейшего развития. :)

Но специфика моей компании требует, чтобы наши клиенты могли смотреть наши работы на локальных машинах. При отключенном инете. :-/
Поэтому я решил использовать подгрузку этого же xml в невидимый iframe.

Решение выглядит так:
1. В xml-файле храню структуру навигационного дерева для сайта.
2. Загружаю xml в iframe и javascript-ом полуцчаю из xml-дерева элементы
3. Трансформирую xml-дерево в html-таблицу

Для получения корневого xml-элемента я использую свойство documentElement. Gecko-браузеры отлично выводят xml-структуру в окно. Без изменений. Поэтому я спокойно перебираю элементы xml и генерю свою табличку с меню.

Но каково было мое удивление, когда оказалось, что IE не просто выводит xml-структуру, а сначала трансформирует его в html-структуру (множество div-ов и span-ов). И тут я оказался бессилен. Мой вопрос в следующем - какие шаги можно предпринять, чтобы ИЕ выводил xml в окно без трансформации в html?
Привожу код примера, который работает в Гекко и не работает в ИЕ.

P.S. У меня появилась догадка, что ИЕ использует встроенный в себя xslt парсер, чтобы трансформировать xml в html. Если это так, то возможно, одно из решения проблемы - для ИЕ брать innerHTML из ифрейма, затем использовать обратную трансформацию в xml-дерево и уже после этого трансформировать javascript и DOM-методами.

Какие у Вас будут мысли о решении проблемы?
Спасибо.


xml_in_iframe.zip
 Description:
архив работающего примера

Download
 Filename:  xml_in_iframe.zip
 Filesize:  2.1 KB
 Downloaded:  1387 Time(s)

Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 269
   поощрить/наказать

Location: Питер

PostPosted: Fri Jun 03, 2005 11:09 am (спустя 15 часов 45 минут; написано за 1 минуту 34 секунды)
   Post subject:
Reply with quote

Вадим Макишвили
Посмотрите темы в этом разделе - я приводил недавно ссылку на сайт, где описана безопасная подгрузка xml в фреймы, описаны проблемы IE и методы их решения.
Back to top
View user's profile Send private message
Вадим Макишвили
Заглянувший



Joined: 04 Mar 2005
Posts: 4
Карма: 0
   поощрить/наказать


PostPosted: Fri Jun 03, 2005 4:50 pm (спустя 5 часов 40 минут; написано за 5 минут 18 секунд)
   Post subject:
Reply with quote

WingedFox
Спасибо за совет. Нашел. Привожу ссылку сюда (www.howtocreate.co.uk/tutorials/jsexamples/importingXML.html).
Решение оказалось очень простым - в xml нужно вставить инструкцию типа:
Code (xml): скопировать код в буфер обмена
<?xml-stylesheet type="text/css" href="style.css" ?>
Таким образом IE пытается применить не свои собственные стили к загружаемому xml-файлу, а пользовательские. Проблема решена.
Выкладываю корректно работающую версию примера.


xml_in_frame_v2.zip
 Description:
1. Исправлена ошибка загрузки xml в iframe в IE 6.0
2. Исправлена ошибка вызова функции по onLoad документа в iframe в IE 6.0

Download
 Filename:  xml_in_frame_v2.zip
 Filesize:  2.41 KB
 Downloaded:  1396 Time(s)

Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 269
   поощрить/наказать

Location: Питер

PostPosted: Fri Jun 03, 2005 4:59 pm (спустя 9 минут; написано за 2 минуты 7 секунд)
   Post subject:
Reply with quote

Вадим Макишвили
Ещё нужно указать, что style.css должен содержать хоть что-нибудь для предотвращения подвиcания некоторых версий IE.
Пример style.css:
Code (css): скопировать код в буфер обмена
/* IE/Mac will not hang now */
Back to top
View user's profile Send private message
Вадим Макишвили
Заглянувший



Joined: 04 Mar 2005
Posts: 4
Карма: 0
   поощрить/наказать


PostPosted: Fri Jun 03, 2005 7:17 pm (спустя 2 часа 17 минут; написано за 3 минуты 3 секунды)
   Post subject:
Reply with quote

WingedFox wrote:
style.css должен содержать хоть что-нибудь для предотвращения подвиcания некоторых версий IE.
Я поступил по-другому. Я в xml ссылаюсь на реальный css-файл. Мне думается, так надежнее.
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 269
   поощрить/наказать

Location: Питер

PostPosted: Mon Jun 06, 2005 10:37 am (спустя 2 дня 15 часов 19 минут; написано за 3 минуты 15 секунд)
   Post subject:
Reply with quote

Вадим Макишвили
Есть небольшая разница:
- если в xml и css будут пересечения, то браузер применит соответствующие стили.
- браузер проводит дополнительный парсинг css файла (ибо iframe - отдельный процесс).
Учитывая проблемы в IE с утечками памяти, это не очень хорошо.
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Fri Jun 30, 2006 5:55 pm (спустя 1 год 24 дня 7 часов 17 минут; написано за 5 минут 38 секунд)
   Post subject:
Reply with quote

Судя по количеству закачек и отсутствию комментариев проблема возникла только у меня.
Что же со мной не так? Моя Opera 7 не видит iframe, если ей на него указать так, как в сценарии (а ведь сценарий предполагает совместимость с Opera 5+):
Code (any language): скопировать код в буфер обмена
var innerFrame = (isMSIE5)? document.getElementById('iframe') : window.frames.iframe;
Чтобы не было ошибки ей нужен вариант isMSIE5, только она, увидев iframe, не увидит в нем ничего.
Opera 8+, кстати, работает хоть так, хоть эдак...
Back to top
View user's profile Send private message Send e-mail
An6rey
Участник форума



Joined: 30 Aug 2007
Posts: 69
Карма: 3
   поощрить/наказать


PostPosted: Sat Sep 13, 2008 6:28 pm (спустя 2 года 2 месяца 13 дней 33 минуты; написано за 29 минут 21 секунду)
   Post subject: Re: Загрузка xml в iframe - проблема в IE
Reply with quote

Вадим Макишвили wrote:
Но специфика моей компании требует, чтобы наши клиенты могли смотреть наши работы на локальных машинах. При отключенном инете. :-/
Поэтому я решил использовать подгрузку этого же xml в невидимый iframe.
Сорри, что поднимаю старую тему. Не уловил сразу смысл проблемы. Автор использует XMLHttpRequest для загрузки по протоколу http:.
Но объект XMLHttpRequest, несмотря на грозное название читает и по протоколу file: c локального тома (при этом request.ststus == 0).
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML