it-swarm.com.de

Greifen Sie auf eine Variable von iframe vom übergeordneten Element zu

skript von iframe

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

skript des übergeordneten Fensters

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

Ich möchte auf die Variable zugreifen, die innerhalb des Iframes vom übergeordneten Element definiert wird. Aber der obige Code funktioniert nicht richtig, kann jemand eine Idee geben, dies zu implementieren.

37
Mirchi

Die Verwendung von contentWindow anstelle von contentDocument funktioniert für mich:

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

Stellen Sie außerdem sicher, dass die Domänen übereinstimmen und dass Sie zum Testen einen Webserver verwenden (Ich habe beim Testen des Dateisystems eine Protokollwarnung erhalten).

50
Lee Gunn

Eine Methode, die für mich immer zuverlässig funktioniert hat, besteht darin, dass der iFrame dem übergeordneten Objekt beim ersten Laden einen Verweis auf sein eigenes Fenster gibt. Das übergeordnete Element kann dann über diese Referenz auf alle Variablen zugreifen. Voraussetzung ist, dass das übergeordnete Element vor dem iFrame geladen ist. Dies ist jedoch für mich normalerweise der Fall.

Also in der übergeordnete 

var iFrameWin;

Dann im iFrame irgendwann nachdem er geladen und niedergelassen hat

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

Dann im übergeordneten Element, wenn ein globaler var-Inhalt vom iFrame gewünscht wird

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

skript von 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

skript des übergeordneten Fensters:

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
    });
}

Das meiste meines Wissens zu diesem Thema kommt von Ben Vinegar's Vortrag über Seamless iFrames

Dies ist eine domänenübergreifende "okay" -Methode, um mit diesem Zeug umzugehen. Ich bin sicher, dass es Sicherheitslücken gibt, genau wie bei allem, was im Web ist.

4
greg5green

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

Beachten Sie, dass domänenübergreifende Einschränkungen weiterhin gelten.

1
Osiris

Sehen Sie, ob dies für Sie funktioniert:

ich habe diese parent.html-Seite erstellt und einen iframe mit einer Texteingabe eingefügt, der den vom iframe-Fenster übergebenen Wert anzeigt:

 <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>

und diese iframe content Seite:

<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>

wenn Sie auf die Schaltfläche klicken, wird der Wert in meinem übergeordneten Fenster angezeigt.

Spielen Sie damit, wenn Sie damit etwas anfangen.

1
Jai

So macht SharePoint, wenn Sie Argumentwerte aus dem übergeordneten Fenster an den Iframe übergeben. Es ist einfach, aber es funktioniert.

<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>

Inside iframeContent.html :

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

Der umgekehrte Weg (Zugriff auf ifr.dialogArgs vom übergeordneten Fenster aus, nachdem der Wert durch das iframe-Dokument geändert wurde) funktioniert ebenfalls.

0
Vinicius