2016-12-15 8 views
0

Было задано несколько вопросов о том, как получить глобальную переменную в iframe. Я хотел бы знать, как объявить и инициализировать глобальную переменную в области iframe от родителя. Я знаю, что могу получить доступ к переменной из iframe, используя document.myGlobalVariable, но я хотел бы иметь возможность ссылаться на нее, просто говоря myGlobalVariable, без document. спереди.Объявить и инициализировать глобальную переменную в области iframe с использованием Javascript (того же домена)

Вот мой HTML:

<html> 
    <head>...</head> 
    <body> 
     ... 
     <iframe src="myFrame.html"></iframe> 
     <script type="text/javascript"> 
      var iframe = document.querySelector('iframe'); 
      var iframeDocument = iframe.contentDocument || iframe.contentWindow.document; 
      iframeDocument.myGlobalVariable = "Hello"; 
     </script> 
    </body> 
</html> 

myFrame.html

<html> 
    <body> 
     ... 
     <script type="text/javascript"> 
      // wait for document to load so parent script can finish running 
      $(function() { 
       console.log(document.myGlobalVariable); // <-- This works 
       console.log(myGlobalVariable); // <-- But this doesn't (and I want this one) 
      }); 
     </script> 
    </body> 
</html> 

Спасибо!

ответ

0

Отвечая на мой собственный вопрос:

Я пытался добавить переменную в документа сферы, как это:

iframe.contentDocument.myGlobalVariable = "Hello";

Но добавление его в документ scope означает, что для ссылки на переменную из JS iframe вы должны добавить document. в начало переменной: document.myGlobalVariable.

Но, как говорится в моем вопросе, я хотел бы иметь возможность ссылаться на него только с именем переменной: myGlobalVariable.

Чтобы сделать это, вам нужно просто добавить его в окно рамки вместо:

iframe.contentWindow.myGlobalVariable = "Hello";

2

У вас есть 3 проблемы.

  1. Вы не ждали документа в IFRAME для загрузки, прежде чем пытаться изменить его DOM
  2. Вы не дожидаясь имущества, установить, прежде чем пытаться прочитать его
  3. Вы установив свойство на document но пытаются прочитать его из window

Итак:

<html> 
    <head>...</head> 
    <body> 
     ... 
     <iframe src="myFrame.html"></iframe> 
     <script type="text/javascript"> 
      var iframe = document.querySelector('iframe'); 
      iframe.addEventListener("load", function() { 
       var iframeDocument = iframe.contentDocument || iframe.contentWindow.document; 
       iframeDocument.myGlobalVariable = "Hello"; 
      }); 
     </script> 
    </body> 
</html> 

и

<html> 
    <body> 
     ... 
     <script type="text/javascript"> 
     setInterval(function() { 
      console.log(document.myGlobalVariable); 
     }, 1000); 
     </script> 
    </body> 
</html> 
+0

Спасибо @Quentin. Кажется, я редактировал свой вопрос, пока вы отвечали. Вы заметите, что я знал, что 'document.myGlobalVariable' будет работать, но как я могу его использовать, так что это просто глобальная область (окна, я думаю?), Так что я могу просто ссылаться на нее с помощью myGlobalVariable 'без' document' спереди? –

+0

Кроме того, спасибо за указание вопроса о загрузке заказа. В моем коде реального мира я использую jQuery, чтобы дождаться загрузки документа до запуска JS iframe. Я добавил это к моему вопросу, чтобы он не отвлекал от моего фактического вопроса. –

+0

Получил это. Вместо этого нужно добавить его в область окна. Добавил мой ответ и примет его. Подтвердил ваш ответ. –