Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Отлов изменений в структуре документа


Автор: Luceus 28.2.2008, 16:40
Всем добрый день!


Столкнулся со следующей задачкой. Есть веб-приложение, которое реализовано с использованием Ajax. Нажимаем кнопку слева, справа происходит перезагрузка содержимого Div'a или создание/изменение структуры документа и тому подобное. Как определить, что произошла перезагрузка некоторых элементов на странице или их изменение? Все усложняется тем, что мне необходимо определить это в WSH скрипте, который подключается к IE браузеру.

Алгоритм работы этого скрипта следующий:
0. Запускается скрипт;
1. Он запускает браузер;
2. Скрипт нажимает на ссылки на странице;
3. Происходит перезагрузка содержимого или создание динамического меню, или исчезают/добавляются некоторые элементы;
4. Скрипт дожидается, когда все изменения завершаться;
5. Продолжить работать с измененным содержимым.

Скрипт - внешняя сущность, который производит тестирование функционала и содержимое приложения он не меняет.

Если необходимы детали, я объясню их.

Спасибо.

Автор: Itsys 28.2.2008, 16:52
ну по идее сравнить document.body.innerHTML до нажатия и после

Автор: Luceus 28.2.2008, 17:01
Если учесть тот факт, что содержимое может изменяться на протяжении определенного времени, то проверяя, изменен ли InnerHtmlбудет не совсем корректно, но я обязательно опробую это на практике. Спасибо большое за подсказку.

Есть ли еще какие-либо другие варианты??

Автор: Itsys 28.2.2008, 17:17
 smile А ты поставь проверку каждые 10 секунд... и когда в течении 2-3 циклов не изменяется - значит изменения закончены

Автор: Sardar 28.2.2008, 17:25
Обсуждались onpropertychange и DOMAttrModifed http://forum.vingrad.ru/index.php?showtopic=196116&view=findpost&p=1412612. Вообще DOM 2 Event спецификация определила массу событий на DOM дереве и странице в целом.

Автор: Luceus 28.2.2008, 18:33
Sardar, посмотрел я эти ссылки, но при попытке использования указанных методов и событий, мой скрипт ругается, хотя у него есть полная поддержка DOM'a. =( Я работаю с браузером IE и буду работать только с ним. Может есть определенная несовместимость??

А есть пример по этому добру в работе?  smile

Я реализовал первый способ, он работает =( Но он не корректен в том смысле, что мне необходимо проверять через определенные интервалы времени текст страницы и сравнивать. Хотелось бы что-нибудь попроще и более действенное. Спасибо.

Автор: Sardar 28.2.2008, 23:43
Да, в IE DOM 2 Event не реализован и вряд ли когда появится. А вот на onpropertychange я поторопился, изменения innerHTML он не ловит.

Цитата(Luceus @  28.2.2008,  17:33 Найти цитируемый пост)
проверять через определенные интервалы времени текст страницы и сравнивать

Я думал тебе события нужны. Тогда просто поставь на setInterval() функцию (вбей в поиск), что будет пробегаться по дереву элементов и смотреть, что изменилось.

Автор: Luceus 29.2.2008, 11:44
Sardar, А как быть вот со следующим. Допустим, я проверяю через определенный интервал времени не было ли каких либо изменений со структурой ветки. Интернет медленный, страница грузится медленно. Несколько раз подряд скрипт прошел, и определил, что ветка не была изменена. Я начинаю работать с элементами, но они подгружаются в процессе, скрипт валится. =(

А можно ли как-нибудь получить объект, который занимается фоновой загрузкой данных?

По всей видимости, придется договариваться с программистами, что бы они сделали какие-нибудь флаги, что бы нам было легче работать с документом.

Я так понял, что больше никаких других способов определить загрузки нет?

Автор: ksnk 29.2.2008, 12:06
Цитата(Luceus @  29.2.2008,  11:44 Найти цитируемый пост)
придется договариваться с программистами,

Круто... Бригада JavaScript программистов...
вероятно, действительно, чем выяснять не изменил ли кто злонамеренно код, путем многократной его проверки, договорится с автором этого самого изменения. Пусть он callback какой вызовет... Ну или самому вставить вызов этого самого callback'а. Мест, как правило, не очень много, да и поэффективнее должно быть.

Автор: Sardar 29.2.2008, 15:03
Цитата(Luceus @  29.2.2008,  10:44 Найти цитируемый пост)
Я начинаю работать с элементами, но они подгружаются в процессе, скрипт валится. =(

Ну свалиться скрипт не должен, а вот то что это не эффективно - это верно.

Самое верное, как указал ksnk, генерить события (вызывать callback'и) при изменении контента, договаривайся со своими. smile

Автор: Luceus 29.2.2008, 16:01
Sardar, ksnk, Itsys, большое спасибо вам за ответы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)