2010-02-12 15 views
21

Ich dachte, das wäre einfach genug, aber ich kann die Antwort nicht finden. Ich muss wissen, wie ich auf einen Iframe-Namen innerhalb des iframe zugreifen kann. Ich habe so etwas versucht, aber es funktioniert nicht.Zugriff Iframe Name von innen Iframe

<iframe name="thename"> 
    <script type="text/javascript"> 
    alert(parent.name); 
    </script> 
</iframe> 

Antwort

47

Sie hatten fast Recht. Wenn Sie das name-Attribut auf frame oder iframe setzen, wird die name-Eigenschaft des globalen window-Objekts des Rahmens auf diese Zeichenfolge gesetzt. (Nicht parent, die an das Fenster des Dokuments verweist, die den Rahmen besitzt.)

Also, wenn ein anderes Skript absichtlich den Namen geändert hat, es ist so einfach wie:

1.html: 
<iframe name="tim" href="2.html"></iframe> 

2.html: 
<script type="text/javascript"> 
    alert(window.name); // tim 
</script> 
+4

Wie wäre es mit dem Zugriff auf Attribute des Iframes? Zum Beispiel, wenn es einen Datensatz attr hat? – AlexStack

+8

@AlexStack: 'window.frameElement' holt Sie das Element aus dem übergeordneten Dokument, das auf sich selbst verweist, Sie können dann' getAttribute' darauf setzen (vorausgesetzt, Sie haben SOP-Zugriff). Siehe http: // stackoverflow.com/questions/4097870/jquery-Zugriff-iframe-id-from-iframe-content/4098384 # 4098384 für Fallback wo nicht verfügbar – bobince

0

So etwas sollte funktionieren:

parent.document.getElementById('idhere').name; 

Sie haben die Eltern zu verwenden und dann das Element erhalten entweder byId, Namen, etc ... Zugriff dann den Namen Eigenschaft.

So sollte der Code wie:

<iframe name="thename"> 
<script type="text/javascript"> 
    var iframeName = parent.document.getElementById('idhere').name; 
</script> 
</iframe> 
+2

bekommen Was passiert, wenn Sie nicht wissen, Die ID oder der Iframe befindet sich auf einer separaten Domain? –

+0

Sie müssten dann getElementsByTagName verwenden und die Ergebnisse anhand einiger Kriterien iterieren. –

0

Nun, ein IFRAME-Element nicht alles enthalten sollte, ist es ein anderes Dokument Targeting. Die Verwendung eines SCRIPT-Tags in einem IFRAME ist daher nicht sehr sinnvoll. Verwenden Sie stattdessen das SCRIPT in dem aufgerufenen Dokument, z.

iframe_caller.html:

<html> 
<body> 
    <iframe id="theIframe" name="theIframe" src="iframe_doc.html"></iframe> 
</body> 
</html> 

iframe_doc.html:

<html> 
<body> 
    <script type="text/javascript"> 
    var iframes= parent.document.getElementsByTagName("iframe"); 
    document.write(iframes[0].getAttribute("id")); 
    </script> 
</body> 
</html> 

Hinweis I parent.document.function() dort bin mit.

43

Es ist eine Kombination aus ich Antworten bevorzugen:

// window.frameElement Gets IFrame element which document inside 
window.frameElement.getAttribute("Name"); 

Es funktioniert auf IE7 +, Mozilla & Chrome

+2

Ich mag diese Antwort mehr als die akzeptierte Antwort, weil es das tatsächliche Iframe-Element verweist. – keyneom

+0

funktioniert das nicht auf http://publisherconsole.appspot.com/safeframe/creative-preview.html, irgendwelche Vorschläge? – PayteR

+0

Ich fand es heraus https://Stackoverflow.com/a/46128839/839434 – PayteR

1

in einigen Fällen window.frameElement gibt null in iframe zurück, also habe ich eine Umgehungslösung dafür gefunden.

1. benötigen Sie Hash in src url von iframe

<iframe name="tim" href="2.html#your-hash"></iframe> 

2. in iframe setzen Sie diesen Hash mit

<script type="text/javascript"> 
    var hash = window.location.hash; 
</script>