Подтвердить что ты не робот

Доступ к переменной iframe из родительского

script iframe

<script type="text/javascript" >
var a=5;
</script>

script родительского окна

<script type="text/javascript" >
function close()
{
var check=document.getElementById("iframeid").contentDocument.a;
alert(check)
}
</script>

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

4b9b3361

Ответ 1

Использование contentWindow вместо contentDocument работает для меня:

var check = document.getElementById("iframeid").contentWindow.a;

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

Ответ 2

Один метод, который всегда работал надежно для меня, - это то, что iFrame дает родительской ссылке ссылку на свое собственное окно при первом загрузке. Затем родитель может получить доступ ко всем переменным через эту ссылку. Это требует, чтобы родитель загружался до iFrame, но для меня это обычно так.

Итак, в родительском

var iFrameWin;

Затем в iFrame в какой-то момент после загрузки и установки

parent.iFrameWin = window;  //parent now has a ref to the iframe window

Затем в родительском, когда он хочет получить глобальное содержимое var из iFrame

alert(iFrameWin.ivar);  // shows value if the global 'ivar' in the iFrame

Ответ 3

script iframe:

var a = 5;
window.parent.postMessage(['varA', a], '*'); // put this in some sort of function, ready, or whatever - you can call it multiple times if you need to as the code in the parent is an eventListener

script родительского окна:

var b;
// you might want to write these into if statements to make sure that e.data[0] is varA if you have multiple messages coming across
if (typeof window.addEventListener != 'undefined') {
    window.addEventListener('message', function(e) {
        b = e.data[1];
    }, false);
} else if (typeof window.attachEvent != 'undefined') { // this part is for IE8
    window.attachEvent('onmessage', function(e) {
        b = e.data; // you'll probably have to play around with this part as I can't remember exactly how it comes across in IE8 -- i think it will involve slice() iirc
    });
}

Большинство моих знаний по этой теме происходит от Бен Уингар говорит о бесшовных iFrames

Это кросс-доменный метод "хорошо", чтобы справиться с этим. Я уверен, что есть некоторые дыры в безопасности, как и в любом месте в Интернете.

Ответ 4

document.getElementById('ID_OF_IFRAME').document.getElementById('f1')

Обратите внимание, что междоменные ограничения будут по-прежнему применяться.

Ответ 5

Посмотрите, работает ли это для вас:

i создал эту страницу parent.html и поместил в нее iframe с текстовым вводом, который отобразит значение, переданное из окна iframe:

 <html>
     <head>
     <title>IFrame Example</title>
     <script language="javascript">
          function hello(string){
               var name=string
               document.getElementById('myAnchor').value=name;
           }
     </script>
     </head>
     <body>
         <iframe namne="iframe" id="iframe_id" src="inputForm.html" height="150" >
         </iframe>
         Name: <input type="text" id="myAnchor" >
         </body>
</html>

и этой страницы iframe content:

<html>
   <head>
   <title>IFrame Child Example</title>
   </head>
   <body>
   <form name="frm2" >
      <h1><font color="#000099">Input Form</font></h1>
      <p>Name : </p><input type="text" name="resp" id="input" value=""/>
      <input type="button" onclick="parent.hello(this.form.resp.value);" value="Submit" />
   </form>
 </body>
</html>

нажав кнопку, я получу значение в родительском окне.

Играйте с ним, если вы получите что-то с этим.

Ответ 6

Вот как это делается SharePoint при передаче значений аргументов из родительского окна в iframe. Это просто, но он работает.

<html>
<body>
  <iframe id="iframe1"></iframe>
  <script type="text/javascript">
    var ifr = window.document.getElementById("iframe1");
    ifr.dialogArgs = "Hello from the other side.";
    ifr.src = "iframeContent.html"
  </script>
</body>
</html>

Внутри iframeContent.html:

<html>
<body>
    <input type="button" value="Click Me!" onclick="alert(window.frameElement.dialogArgs);" />
</body>
</html>

Другой способ (доступ к ifr.dialogArgs из родительского окна после его значения, измененного документом iframe) также работает.