亲,如果是html里面嵌套了iframe的话总共分为两种情况:
第一种是:父页面与子页面属与同一个域。例如:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<iframe id="children" src="../OrangeBus/01.html" ></iframe>
</body>
</html>
此时如果想获取01.html里面的元素应该是:window.frames["children"].document.getElementById("元素id");
第二种是:父页面引入的子页面不属于同一个域
例如:
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<iframe id="children" src="www.bb.com" ></iframe>
</body>
</html>
其中 父页面的域名假如是:www.aa.com 子页面域名:www.bb.com 。两者不属于同一个域名。
当两个域不同时,如果想相互调用,那么同样需要两个域都是由你来开发才可以。
用iframe可以实现数据的互相调用。解决方案就是用window.location对象的hash属性。hash属性就是http://domian/web/a.htm#dshakjdhsjka 里面的#dshakjdhsjka。利用JS改变hash值网页不会刷新,可以这样实现通过JS访问hash值来做到通信。不过除了IE之外其他大部分浏览器只要改变hash就会记录历史,你在前进和后退时就需要处理,非常麻烦。不过再做简单的处理时还是可以用的。大体的过程是页面a和页面b在不同域下,b通过iframe添加到a里,a通过JS修改iframe的hash值,b里面做一个监听(因为JS只能修改hash,数据是否改变只能由b自己来判断),检测到b的hash值被修改了,得到修改的值,经过处理返回a需要的值,再来修改a的hash值(这个地方要注意,如果a 本身是那种查询页面的话比如http://domian/web/a.aspx?id=3,在b中直接parent.window.location是无法取得数据的,同样报没有权限的错误,需要a把这个传过来,所以也比较麻烦),同样a里面也要做监听,如果hash变化的话就取得返回的数据,再做相应的处理。
总结:
第一种情况:域和子域的问题,可以完全解决交互。
第二种情况:跨域,实现过程非常麻烦,需要两个域开发者都能控制,适用于简单交互。
ps:对于域的理解,一般初学java的话,完全可以默认为一个项目就是一个域。
最后啰嗦一句:在现在的开发中,iframe可能会有用到,但是从技术的发展来看,这个属于要过时的技术啦~~
(第一次打这么多字===,希望能对你有帮助,如果有问题,可以私聊我哦~)
|