![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| lazabt |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 22.8.2006 Репутация: 5 Всего: 5 |
Может быть кто сталкивался с такой проблемой...
В iframe подгружается html с javascript'ом (document.write("<script src...")). После загрузки происходит присвоение ссылок на js-функции iframe'а родительскому окну: из iframe: parent.foo = window.foo Т.е. из родительского окна теперь можно спокойно делать вызов foo(), вместо frames["ifr"].foo(). НО, после загрузки следующего html в этот же iframe, ссылка на foo в родительском окне ТЕРЯЕТСЯ. Т.е. переменная window.foo существует и даже foo.toString() выдает тело функции, а вот вызов window.foo() приводит к ошибке. Не понятно, почему такое происходит, ведь при удалении iframe.foo, интерпретатор js должен был посмотреть на RefCount ссылки foo и увидеть, что есть еще и window.foo, и отменить удаление. В FF работает, в IE6 именно такое поведение. А на самом деле мне нужно реализовать это для ANT Fresco. Интересно, что для других js-объектов (Object, Array и т.д.), отличных от Function все работает, хотя они тоже должны копироваться по ссылке (не по значению). Вот пример: Браузер: IE6. При нажатии include1 должен вывести foo1 (так и есть), при последующем нажатии include2 должен вывести foo1, foo2, а выводит только foo2, т.к. ссылка на foo1 потеряна test.html
fr1.html
fr2.html
|
||||||
|
|||||||
| vasac |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: 13 Всего: 36 |
ИМХО не факт, так как эти foo находятся в различных документах. По-моему здесь уже многое зависит от реализации в браузере. Так же возникает множество других вопросов, типа, а в каком контексте должна выполняться foo1, после перезагрузки фрейма. Что за задача то? Скорее всего это можно решить подругому. |
|||
|
||||
| lazabt |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 22.8.2006 Репутация: 5 Всего: 5 |
Да, пожалуй, все не так уж и прозрачно, как кажется на первый взгляд...
Кстати, интересно, что если сохранить тело функции в строке (http://www.irt.org/script/1234.htm) и создать при помощи конструктора новую функцию:
то эффект все-равно тот же. Задача простая: загрузить в динамике javascript-файл
в ANT Fresco-браузере (держит только DOM0). Естественно, никакие там AJAX-ы не работают. При этом document.write("<script...") тоже не подходит, т.к. include'ить приходится в разных местах документа, в т.ч. и по событию (например, нажали кнопку - загрузился скрипт, приложение продолжило выполнение). Я пытался решить задачу через фрейм-loader, в который передается имя js-файла. Фрейм делает внутри себя при загрузке document.write("<script ..."). Дальше я хотел контекст фрейма скопировать в главное окно. Не получилось Это сообщение отредактировал(а) lazabt - 22.8.2006, 14:27 |
||||
|
|||||
| vasac |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: 13 Всего: 36 |
Инклюд так делается:
Дальше осталось только поймать момент полной загрузки. В Gecko это делается просто через onload. В IE нужно ловить onreadystatechange и отслеживать статус загрузки. Самый же надежный способ — поставить в конце загружаемой либы вызов нужной функции. |
|||
|
||||
| lazabt |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 22.8.2006 Репутация: 5 Всего: 5 |
К сожалению fresco не поддерживает DOM-модель (DOM level 0 = Internet Explorer и Netscape до 4 версии).
Максимум, что можно делать - document.write |
|||
|
||||
| vasac |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: 13 Всего: 36 |
Что если в основной документ передавать имя функции и ее тело? В основном:
В подключаемом:
|
||||
|
|||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |