захват глобальной переменной из встроенного iframe

#javascript #iframe

#javascript #iframe

Вопрос:

скажем, HTML-страница (Page.htm ) содержит следующее…

 <script type="text/javascript">
    var vara = 'varA';
</script>
  

Теперь эта страница загружается в iframe с другой страницы с помощью…

 <iframe id="child_frame" src="http://mysite.com/Page.htm" />
  

С родительской страницы я хотел бы получить значение глобальной ‘vara’ из Page.htm .

Ни одна из следующих строк не работает…

     window.frames['child_frame'].window.vara;

    window.frames['child_frame'].window['vara'];

    window.frames['child_frame'].contentWindow['vara']; 
    // in fact contentWindow returns undefined!!
  

Любая помощь была бы оценена!

Обновить

После более подробного рассмотрения этой проблемы и использования различных доступных библиотек для решения этой проблемы у меня было озарение, что, поскольку у меня есть контроль IIS как над основным, так и над встроенным веб-сайтами iframe, я могу работать в рамках правил междоменных сценариев, используя один и тот же базовый URL для различных веб-сайтов. Кроме того, библиотеки, которые решают проблему, похоже, нуждаются в постоянном обновлении, поскольку производители браузеров постоянно повышают свою безопасность с помощью обновлений. Было бы действительно непросто постоянно обновлять обходной путь для обхода того, что браузер пытается помешать вам сделать.

Ответ №1:

Ваш первый синтаксис должен работать, ЕСЛИ вы используете тот же doamin.

Если IFRAME загружается страница из другого домена, то вы не сможете получить к ней доступ.

Комментарии:

1. ах, имеет смысл. Вы можете пойти наоборот? Может ли дочерний iframe видеть глобальные переменные своего родителя (разные домены)?

2. @John: это было бы еще хуже, тебе не кажется? В любом случае вас может заинтересовать это

3. @John Вы можете использовать parent. parent.myGlobalVarInPageHtm.id например.

Ответ №2:

Это:

 <iframe id="child_frame" src="http://" />
  

Должно быть:

 <iframe name="child_frame" src="http://" />
  

Атрибут iframe «id» следует изменить на «name».