#javascript #function #frames
#javascript #функция #фреймы
Вопрос:
У меня есть сгенерированный сторонним пользователем набор фреймов (из справочной системы), и я могу добавить код в подфрейм, содержащий страницы моего контента. Я не могу изменить содержимое другого набора фреймов, поскольку оно генерируется процессом сборки.
У меня может быть некоторый js-код myhandler()
на каждой странице моего HTML-контента, который загружается в подфрейм. Это myhandler()
срабатывает для вызова, когда действие происходит в верхнем фрейме.
Я хотел бы создать функцию в подфрейме, но чтобы она принадлежала родительскому (верхнему) фрейму, чтобы она создавалась только один раз, что означает, что я могу проверить, установлена ли top.myhandler
она уже, и если это так, она просто использует ее повторно.
Когда подфрейм загружается с другим содержимым HTML, myhandler()
функция, созданная на предыдущей странице содержимого, больше не доступна, когда родительское действие вызывает ее вызов.
Возможно ли в javascript для фрейма создать функцию в другом фрейме? Или есть другое решение для этого?
Ответ №1:
Для межкадрового javascript существует 1 условие: все задействованные страницы (в разных фреймах) должны находиться в одном домене. Если страницы находятся в разных доменах или поддоменах — межкадровый доступ к javascript будет ограничен в целях безопасности.
Предположим, у вас есть набор фреймов с 2 страницами: 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 на обеих страницах начнет видеть друг друга, так же, как эти страницы находятся в одном домене.