从iframe内部访问iframe名称

34

我觉得这应该很简单,但我找不到答案。我需要知道如何从iframe内部访问iframe的名称。我尝试了类似于这样的代码,但它不起作用。

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

65

我更喜欢的是一组答案:

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

它可以在IE7+,Mozilla和Chrome上运行


3
我更喜欢这个答案,因为它提到了实际的iframe元素。 - keyneom
在http://publisherconsole.appspot.com/safeframe/creative-preview.html上不起作用,有什么建议吗? - PayteR
1
MDN文档:Window.frameElement - dakab

62
你几乎说得对。在frameiframe上设置name属性会将框架的全局window对象的name属性设置为该字符串,而不是parent,后者是指拥有该框架文档的窗口。因此,除非其他脚本有意更改名称,否则它很简单:
1.html:
<iframe name="tim" href="2.html"></iframe>

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

8
访问 iframe 的属性怎么样?例如,如果它有一些数据集属性? - AlexStack
15
window.frameElement 可以获取来自父文档指向你自己的元素,然后你可以在它上面使用 getAttribute(假设你有 SOP 访问权限)。如果不可用,可以参考 https://dev59.com/l1HTa4cB1Zd3GeqPTKKP#4098384 进行备选方案。 - bobince

9
在某些情况下,window.frameElement在iframe中返回null,因此我找到了解决方法。 1.您需要在iframe的src URL中设置哈希值。
<iframe name="tim" href="2.html#your-hash"></iframe>

2. 在 iframe 中,您可以使用以下代码获取此哈希值:

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

4

一个IFRAME元素不应该包含任何内容,它的目标是另一个文档。因此,在IFRAME中使用SCRIPT标签并没有太多意义。相反,应该在被调用的文档中使用SCRIPT,例如:

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>

Note I'm using parent.document.function() there.


0

类似这样的代码应该可以运行:

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

你需要使用父元素,然后通过id、Name等获取元素,再访问name属性。

因此,你的代码应该像这样:

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

2
如果您不知道ID或iframe位于单独的域上怎么办? - ness-EE
然后,您将需要使用getElementsByTagName并按某些标准迭代结果。 - Todd Moses

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接