![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Пример как сделать загрузку документа в бекграунде к вопросу: Интерактивность загрузки
Ответ уже был давно готов, но из-за проблемы с хостингом опубликовать не мог, спасибо говорим Aliance за решение проблемы. Скоро снова поднимается винградовский файловый сервак, тогда этих проблем иметь не будем. Задача: есть неткоторый документ, в котором несколько самодельных табов. Если для таба существует контент, то его показать, иначе загрузить. Если JS отключен, то всё должно продолжать работать, т.е. при клике на таб перезагружается весь документ. Плюсы: если JS включен, то сервер отдает не весь документ(менюшки, потолок/подвал и т.д.), а только контент; один раз загруженный таб показывается сразу при возвращении на него. Минусы: в этом примере загрузка идёт через ифрейм(для случая если JS выключен), поэтому будем слышать щелчки под ИЕ и возможноые проблемы с кнопками вперёд/назад браузера(жать придётся по нескольку раз), т.к. перезагрузка ифрейма гадит в истории. Весь код выкладывать не буду, открываем и смотрим по ссылке: http://aliance.hoha.ru/Sardar/tabs_load/content_data.htm http://aliance.hoha.ru/Sardar/tabs_load/image_data.htm http://aliance.hoha.ru/Sardar/tabs_load/tabsdata.htm Разбираем. Простой HTML код представляющий табы, собственно над этим(рутина) сидел больше чем над JS Как видим инфа первого таба и второго уже есть, поэтому скрипт не будет обращатся к серверу. Третий таб пустой, инфа лежит tabsdata.htm, который будет подгружен. На случай если JS отключен или контент не вложен существуют image_data.htm и content_data.htm для переходов. Каждый загружаемый документ имеет общий стиль и общий базовый скрипт. Плюс в конце документа имеем одинаковый для всех кусок кода, забирающий контент из текущего(загруженного) таба и отдающий его выше. Если же документ открыт в основном окне, а не в ифрейме то ничего не делаем. Ифрейм в котором грузим документы создан заранее, дабы не смущать такие кривые браузеры как Опера 6. Основной скрипт очень прост. Функция changeTab меняет текущий таб, параметром передаётся элемент a. Если отключен JS, то onclick не сработает и мы загрузим в текущем окне документ по ссылке. Иначе грузим ссылку в ифрейме, попутно передавая инфу GET параметрами на сервер, дабы тот генерил только необходимые данные. Также если в обработчике onclick произойдёт ошибка, то возвратим true и ссылка отработает. Первым делом останавливаем загрузку в если такая была. Затем ищем контент для таба. Конечно можно посчитать позицию таба, а затем выбрать в это же позиции слой с контентом, но для ясности мы определим у ссылок аттрибут tbcontent, в котором лежит порядковый номер слоя с данными. Находим контейнер всех табов, находим конкретный таб(для этого определенны функции findTabContainer/findTabContent). Далее если слой не пуст, то делаем его активным. Иначе грузим в скрытом ифрейме ссылку, передавая параметр ltgt=frame, указывающий что загрузка идёт в ифрейме(для примера я не использовал серверных скриптов, дабы каждый мог скачать и посмотреть результат. На практике генерим разные документы: для основного окна или облегчённые для скрытых загрузок). Загруженный документ отдаёт контент вызовом opener.tabs_takeData. Родительское окно приниамет контент, освобождает ифрейм и убирает сообщения о загрузке. Функция centerAbsCords выдаёт центр экрана пользователя, не зависимо от браузера и установленных сайд и тулбаров. Добавлю: мы всегда стоим перед выбором конкретного юзера, если пишем интранет приложение, то не стоит отказываться от вещей облегчающих жизнь и писать "под все браузеры". Например на практике я использую загрузку контента не через ифрейм, а через подгружаемые скрипты. Это удобней. Как видим я попросту забиваю на владельцев старых или глючных браузеров, а также на тех у кого отключен JS, это не мой пользователь. А если писать только под ИЕ(юзая bechaviors, expressions и много-много других фичь) либо под Мозиллу(XUL, JSLib и другое), то получается конечный продукт высокого качества. Не кастрированный, а хороший, но под конкретную платформу Если есть вопросы/пожелания - скидываем сюда. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Aliance |
|
||||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 55 Всего: 137 |
А то, что таблица пустая (рамка) остается - это так и задуманно? Это я так понимаю относится к случаю если
Добавлено @ 23:16
А это не протеворечит никаким спецификациям (X)HTML? С этим не будет траблов где-либо? |
||||
|
|||||
| Sardar |
|
||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Точно, под ИЕ это глюк! Он <модератор выражается> оставляет таблицу отрисованной. Смотрим под Мозиллой если хотим видеть это правильно. Либо не используем в контенте табов таблиц, либо пишем какой то хитрый стиль, который можно спросить в разделе по вёрстке
Да противоречит. Я этот аттрибут сделал для ясности -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||
|
|||||
| Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 55 Всего: 137 |
А флагами никак? По аргументам... |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 78 Всего: 317 |
Или по аргументам, или строкой в className, можно эвристикой попробовать угадать, вообщем на по вкусу
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |