一 主域名相同处理方法 document.domain+iframe的设置
对于主域相同而子域不同的例子,可以通过设置document.domain的办法来解决。具体的做法是可以在http://www.a.com/a.html和http://script.a.com/b.html两个文件中分别加上document.domain = ‘a.com’;然后通过a.html文件中创建一个iframe,去控制iframe的contentDocument,这样两个js文件之间就可以“交互”了。当然这种办法只能解决主域相同而二级域名不同的情况,如果你异想天开的把script.a.com的domian设为alibaba.com那显然是会报错地!代码如下:
www.a.com上的a.html document.domain = 'a.com'; var ifr = document.createElement('iframe'); ifr.src = 'http://script.a.com/b.html'; ifr.style.display = 'none'; document.body.appendChild(ifr); ifr.onload = function(){ var doc = ifr.contentDocument || ifr.contentWindow.document; // 在这里操纵b.html alert(doc.getElementsByTagName("h1")[0].childNodes[0].nodeValue); }; script.a.com上的b.html document.domain = 'a.com'; 这种方式适用于{www.kuqin.com, kuqin.com, script.kuqin.com, css.kuqin.com}中的任何页面相互通信。
备注:某一页面的domain默认等于window.location.hostname。主域名是不带www的域名,例如a.com,主域名前面带前缀的通常都为二级域名或多级域名,例如www.a.com其实是二级域名。 domain只能设置为主域名,不可以在b.a.com中将domain设置为c.a.com。
问题:
1、安全性,当一个站点(b.a.com)被攻击后,另一个站点(c.a.com)会引起安全漏洞。
2、如果一个页面中引入多个iframe,要想能够操作所有iframe,必须都得设置相同domain。
二 window.name 方法处理
1 引入test.js 类库 2 同及目录创建一个空的html页面为proxy.html,作为代理 作用:当iframe远程访问的页面更改window.name属性后跳转到这个代理页面 则当前页面与代理页面在同一个域名下,则可以取出代理页面的window.name 3 使用实例:www.aaa.com/a.html ,www.aaa.com/proxy.html, www.eee.com/b.html a.html中 <script type="text/javascript" src="test.js"></script> <script type="text/javascript"> var _str = '', _cnt = 0; function myfunc( id ) { return function( data ) { _str += id + ':' + data + '\n'; ++_cnt; if (_cnt >= 1) alert(_str); }; } var _links = [ { id: 1, url: 'http://www.aaa.com/test.html' } ]; function dosome(){ for (var _i=0; _i<_links.length; ++_i) { wnRequest.send(_links[_i].url, myfunc(_links[_i].id)); } } dosome(); //wnRequest.setname('这里可能是一串加密用的密钥哦,俺从 https 那边过来滴!', 'http://www.eee.com/test8.html'); </script> 代理页面时空的 b.html 中 <script type="text/javascript"> window.name = '需要跨域传递的数据'; </script>
附件中是:跨域调用的类库
参考来自: http://www.iteye.com/topic/901182
评论