JavaScript:获取加载页面中的iframe id

26

我有一个带有iframe的页面。每次页面加载时,iframe都会被分配一个唯一的id和name。我可以在加载的iframe中通过以下方式获取iframe的名称:

alert(parent.window.frames[window.name].name);

但是当我尝试获取id值时:

alert(parent.window.frames[window.name].id);

我为什么会收到undefined

如何获取加载页面内iframe的id属性?


http://jsfiddle.net/cqFtB/


<iframe id="lyygi8stwZSANUEh" src="http://example.com" name="zma82vRVe18xbAqW" title="Awesome Iframe">

example.com:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Awesome Iframe</title>
</head>
<body>
    <script type="text/javascript"> 
        alert(parent.window.frames[window.name].name);
    </script>
</body>
</html>
3个回答

66

尝试在 iframe 中使用 window.frameElement.id


以上代码会产生以下错误: 无权访问属性'id' - Pav
如果 iframe 和包含它的页面来自不同的源,就会发生这种情况。在你的情况下是这样吗? - Boris Zbarsky
Boris,你是正确的,它们来自不同的来源。但是为什么我可以毫无问题地访问namelocation等属性呢?这只适用于ID吗? - Pav
3
遍历帧数组有点特别,因此你可以在跨源窗口上这样做。name 也可能是如此....但请注意,例如无法访问 parent.location.href。大多数DOM属性都受同源策略的限制;默认情况下,任何可以提供关于其他源文档信息的内容是禁止访问的。 - Boris Zbarsky
2
根据当前规范,在跨域情况下,您将获得 null 而不是一个对象,您无法从中获取任何属性。当然,最终结果是相同的:您无法获取跨域的 id。 - Boris Zbarsky
显示剩余2条评论

0
在 iframe 中,这对我来说是有效的。但前提是 iframe 和父级必须共享同一个域名:
this.frameElement.attributes.id

-2

您需要插入iframe的名称:

alert(parent.window.frames['zma82vRVe18xbAqW'].name);

如果您不知道ID,会发生什么? - GreyCloud

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