浏览 2777 次
锁定老帖子 主题:window.name 跨域
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2015-03-18
window.name跨域的基础是:iframe页面在其url改变的时候,不会改变name的数据, 从而通过proxy页面(与应用页面相同域名)的跳转,绕过跨域的限制。 name传输的数据,大小一般为2M,IE和firefox下可以大至32M左右。 <pre name="code" class="js"> CrossDomain = { // 设置的代理文件 proxy: 'http://shawn.a.com:1234/proxy.html', /** *@param {String} url 接口 *@param {Function} callback 回调函数,可选。 */ getData: function(url,callback){ var state = 0, iframe = document.createElement('iframe'); iframe.id = "CrossDomainIfrme"; function loadfn() { if (state === 1) { // 读取数据 callback && callback(iframe.contentWindow.name); destroy(); } else if (state === 0) { state = 1; iframe.contentWindow.location = CrossDomain.proxy; } } function destroy(){ iframe.contentWindow.document.write(''); iframe.contentWindow.close(); document.body.removeChild(iframe); } iframe.src = url; if (iframe.attachEvent) { iframe.attachEvent('onload', loadfn); } else { iframe.onload = loadfn; } document.body.appendChild(iframe); } } </pre> proxy.html 只是一个空页面 <pre name="code" class="html"> <!DOCTYPE html> <html><head><title></title><meta charset="utf-8"></head><body></body></html> </pre> 获取数据的接口,需要返回一个页面,例如: <pre name="code" class="html"> <!DOCTYPE html> <html><head><title></title><meta charset="utf-8"> <script> window.name = 'I set data!'; //这里把数据放到name里面 </script> </head><body></body></html> </pre> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |