![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| svl63 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 5.4.2007 Репутация: нет Всего: нет |
Следующий скрипт запускается из левого фрейма ссылкой типа <a href="javascript:vis('cpu')">, в правом фрейме изначально имеется какой-либо документ.
Проблема возникает в блоке else, т.к. документ не успевает загрузиться. Её можно решить, если отложить отображение блока с помощью setTimeout:
Но, на мой взгляд, это кривое решение, т.к. необходимое значение задержки для разных браузеров, документов, машин сильно различается. Например, для IE можно установить любое значение, вплоть до 0, т. е. IE (в отличие от Opera и Firefox), по видимому, не отслеживает Timeout во время некоторых других своих процессов (например, загрузки документа). Короче, вопрос: как можно отследить в этом скрипте, что list.html уже загружен полностью, или как можно передать idn в list.html, чтобы там его обработать по onLoad? |
||||
|
|||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 49 Всего: 401 |
А зачем передавать туда idn? Есть же глобальный ido, который после отрабатывания ф-ции имеет нужное значение. Почему бы его-то и не считать по загрузке правого фрейма? -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| svl63 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 5.4.2007 Репутация: нет Всего: нет |
Каким образом? Я пробовал его (ido) просто использовать в list.html, но по информации из http://dklab.ru/chicken/nablas/39.html глобальные области видимости скриптов разных фреймов не пересекаются. Пробовал также выносить скрипты в отдельный JS-файл, подключаемый к обоим документам - тоже облом.
|
|||
|
||||
| 12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
Конечно, нужно проверять существование контрольной переменной в фрейме, которая определяется в конце страницы, а задержку делать в цикле, пока не станет определённой. Совсем хорошо, если предусмотреть возможность недозагрузки страницы в фрейме, остановить цикл по истечении разумного времени (пользователь может нажать "Stop" в любой момент).
Добавлено через 4 минуты и 53 секунды Области видимости разные, но обращайтесь через объет фрейма, как полагается, он там в любом случае нужен, чтобы ошибки не было при undefined. Или, точнее, достаточно проверять только наличие document в фрейме. Так будет лучше, чем onload, потому что сработает раньше по загрузке текста данного фрейма, а не всего окна с фреймами и картинками. |
|||
|
||||
| svl63 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 5.4.2007 Репутация: нет Всего: нет |
Я не очень продвинут в Javascript, поэтому, если можно, пожалуйста, немного подробнее.
Я пытался организовать задержку в цикле while (parent.right.document.title!="list"){}, но какие действия выполнять в теле цикла, не смог определиться. Далее. Что вы имеете в виду, говоря об объекте фрейма: уже имеющийся объект или его нужно создавать. Если первое - как через него обращаться, если второе - как его создать? Пытался создать просто объект со свойством ido в общем JS-файле, но получается, как и при простом определении переменной: при каждой загрузке правого фрейма по событию onLoad загружаемого list.html создается новый объект, и ido переопределяется. Далее я не совсем понял, проверять наличие какого document, в каком фрейме и откуда проверять (документы во время работы скрипта во всех фреймах имеются всегда, кроме момента замены документа в правом фрейме на list.html)? Если проверять из левого фрейма наличие нужного document в правом, то это ведь делается в блоке if, если проверять из list.html наличие во фрейме самого себя, не вижу в этом смысла. Забыл сказать. Скрипт предназначен для локальной работы, поэтому особенности загрузки через сеть не имеют значения. |
|||
|
||||
| svl63 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 5.4.2007 Репутация: нет Всего: нет |
Всем большое спасибо. С объектом фрейма разобрался: parent.left.ido. Хотелось бы еще разобаться с циклом задержки. Если не трудно, хоть какой-нибудь намек.
|
|||
|
||||
| 12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
В JS нельзя сделать задержку в настоящем цикле (только "зависание" браузера), поэтому под задержкой в цикле я подразумевал цикл на if с setTimeout. Если условие не выполнено (нет документа в фрейме), делаете новый setTimeout той же функции (как бы рекурсия, но и не рекурсия никаким боком, как и не цикл), если выполнено - не делаете. Цикл получается из разрозненных вызовов, между которыми таймаут. По-другому в JS никак (нет wait()|sleep() ).
-------------------- Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go |
|||
|
||||
| svl63 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 5.4.2007 Репутация: нет Всего: нет |
Спасибо еще раз. Про цикл с задержкой все ясно. Меня вполне устраивает решение с передачей переменной из фрейма в фрейм.
|
|||
|
||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |