@Dimon123
Новичок, разбираюсь в веб-программировании

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

Привет.
Я хочу достать переменную "а" с помошью джаваскрипт программы файла 1.html (используя frames) из вложенного фрейма 2.html. Плюс я хочу достать переменную "b" с помошью джаваскрипт программы файла 2.html (используя parent) из главного окна.
Для этого я пишу главную страницу 1.html:
<html>
	<head>
	</head>
	<body>
		<iframe src='2.html'></iframe>
		<script>
		var b=2;
		alert(window.frames[0].a);
		</script>
	</body>
</html>

И пишу страницу 2.html:
<html>
	<head>
	</head>
	<body>
		<script>
		var a=1;
		alert(window.parent.b);
		</script>
	</body>
</html>

Переменная "b" достается без проблем, а вместо переменной "а" браузер выводит undefined. Пробовал запускать под денвером, думал, что проблема в безопасности, не сработало.
Через консоль удается получить значение, через алерт или документрайт - нет.
Вопрос: как достать переменную из вложенного фрейма, чтобы, например, вывести ее алертом?
  • Вопрос задан
  • 3142 просмотра
Пригласить эксперта
Ответы на вопрос 3
@Panya
Надо дождаться сначала загрузки этого фрейма и потом можно будет получить. Например:
<html>
  <head>
  </head>
  <body>
    <iframe src='2.html'></iframe>
    <script>
    var b=2;
    var iframe = window.frames[0];
    iframe.window.onload = function() {
        alert(this.a);
    };
    </script>
  </body>
</html>
Ответ написан
thewind
@thewind
php программист, front / backend developer
Это плохая практика - обмениваться данными между фреймами вот так, даже в рамках одного сайта. Лучше проектировать структуру так, чтобы данные внутри фреймов были известны общему контроллеру, иначе потом можно залезть в тупик.
Ответ написан
gluck59
@gluck59
Виртуальный глюк
Это конечно зло... но если лень продумывать структуру кода, попробуйте создать глобальную переменную вместо локальной.

То есть вместо
var a=1;
сделайте
a=1;

И будьте готовы когда-нибудь напороться на косяк с затиранием этих переменных.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы