让我们想象我有这样的事情:
<html>
...
<div>
<iframe src="test.html" hash="r4d5f7"></iframe>
<iframe src="test.html" hash="8f7x97"></iframe>
<iframe src="test.html" hash="gg4v5e"></iframe>
<iframe src="test.html" hash="e54f87"></iframe>
</div>
...
</html>
test.html是空白页面,自定义hash
属性始终具有不同的值,出于安全原因,这两个页面位于同一个域中,iframe元素的数量和顺序是随机的。
我的问题是:有没有办法从内页(test.html)使用Javascript到其正确的iframe元素?让我们说,我在第三个iframe的页面中,我需要获取其iframe元素和alert()哈希值(在本例中为“gg4v5e”)。
更具体一点。如果您熟悉Firefox的Firebug,它可以看到这种情况:
<html>
...
<div>
<iframe src="test.html" hash="r4d5f7">
<html>
...
</html>
</iframe>
<iframe src="test.html" hash="8f7x97">
<html>
...
</html>
</iframe>
<iframe src="test.html" hash="gg4v5e">
<html>
...
</html>
</iframe>
<iframe src="test.html" hash="e54f87">
<html>
...
</html>
</iframe>
</div>
...
</html>
当我在内页的<iframe>
元素中使用我的Javascript时,是否可以调用“something”来获取父元素(<html>
)?
答案 0 :(得分:17)
当然有。 此代码适用于FF和IE6,Opera,Chrome(需要Web服务器以及来自相同域协议和端口的两个文件)
function getHash() {
var ifs = window.top.document.getElementsByTagName("iframe");
for(var i = 0, len = ifs.length; i < len; i++) {
var f = ifs[i];
var fDoc = f.contentDocument || f.contentWindow.document;
if(fDoc === document) {
alert(f.getAttribute("hash"));
}
}
}