Как я могу создать функцию в другом фрейме?

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

У меня может быть некоторый код js myhandler() на каждой странице моего HTML-контента, который загружается в подфрейм. Этот myhandler() вызывается, когда действие происходит в верхнем кадре.

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

Когда подфрейм загружается с другим содержимым HTML, функция myhandler(), созданная на предыдущей странице содержимого, становится недоступной, когда родительское действие инициирует ее вызов.

Возможно ли в javascript для фрейма создать функцию в другом фрейме? Или есть другое решение для этого?


person claya    schedule 01.10.2011    source источник


Ответы (1)


Существует одно условие для межфреймового javascript: все задействованные страницы (в разных фреймах) должны находиться в одном домене. Если страницы находятся на разных доменах или субдоменах, доступ к межфреймовому javascript будет ограничен в целях безопасности.

Предположим, у вас есть набор фреймов с двумя страницами: index.html и index2.html.

Если эти страницы находятся в одном домене, они будут использовать одно и то же пространство имен javascript, т. е. все библиотеки javascript, связанные с index.html, будут доступны из index2.html и наоборот.

Если страницы расположены на разных поддоменах одного домена - возможен переход на несколько уровней вверх. Например:

frame1 contains:    http://myrepo.site.com/index.html
frame2 contains:    http://another.site.com/index2.html

вы можете установить для обоих (в JavaScript): document.domain = "site.com" После этого - код javascript на обеих страницах начнет видеть друг друга, так как эти страницы находятся в одном домене.

person Scherbius.com    schedule 05.10.2011