iframe 跨协议访问
来源:互联网 发布:音频发射器软件 编辑:程序博客网 时间:2024/06/04 14:29
众所周知,ie有个安全策略叫“同源策略”,对同协议、同域名、同端口号的访问没有限制,但凡有一个不同,ie会认为这不是同源,拒绝相互访问。但是我们日常工作中可能会出现某些情况需要突破这个“同源策略”。
楼主我碰到的问题是,在一个http://aa.bb.com/cc/main.jsp中有个iframe,里面src是指向https://aa.bb.com/dd/test.jsp。在自适应高度的js代码里会将dd模块test.jsp的高度去跟cc模块中main.jsp的高度来作判断,动态改变main.jsp里iframe的高度。另外除了自适应高度,还有一些别的功能需要拿到最外层main.jsp里的一些DOM。因为ie的同源策略,使用document.parentWindow.parent.document.....这种方式是行不通的。
模型:
解决方案:采用代理页面来处理。查过一些资料,发现此办法可以处理任何跨协议、跨域名、跨端口的拦截。
原理:子页面test.jsp需要将值传到代理页面proxy1.jsp,然后由proxy1.jsp里的js来控制处理main.jsp里的DOM等。因为main.jsp 与proxy1.jsp 是“同源”,可以相互访问不受限制。
模型:
思路就是这样,这只是单向通信,由test.jsp的某些param来改变main.jsp的方式。
相关代码:
test.jsp
<HTML> <HEAD> <TITLE> test.jsp </TITLE> <!--此页面地址:https://aa.bb.com/dd.test.jsp --> <script>var url = "http://aa.bb.com/proxy1.jsp?param=";//参数请挂在这个后面,可支持多个参数function getParams(){//处理相关数据,视具体情况而定//var param = document.body.height;//url = url + param;}function createProxyPage(){getParams();//获得完整的url//创建代理页面var newIframe = document.createElement("iframe");newIframe.setAttribute("src",url);newIframe.setAttribute("width",0);newIframe.setAttribute("height",0);document.body.appendChild(newIframe);} </script> </HEAD> <BODY onload="javascript:createProxyPage();"> <!--很多代码。。。。。。。 --> </BODY></HTML>
proxy1.jsp
<HTML> <HEAD> <TITLE>proxy1.jsp</TITLE> <!--页面地址:http://aa.bb.com/cc/proxy1.jsp --> <% //scriptlet 来获取test.jsp中创建proxyIframe的src中url里的参数paramvar param1 = request.getParameter("param"); %> </HEAD> <BODY> <input id=param1 value=<%=param1 %> /> <script>var param = document.getElementById("param1").value;//proxy1.jsp已经获取到了test.jsp里传来的参数//需要对外层main.jsp进行处理//document.parentWindow.parent.parent.document.getElementById('...')到了mian.jsp里... </script> </BODY></HTML>
如果是双向通信,有两种模式,具体看项目情况。
双向模型:
原理:
1. 子到父页面原理同上。
2.父到子页面。在proxy1.jsp中可以获取到最外层main.jsp的DOM相关值param2 ,传给proxy2.jsp,proxy2.jsp再通过js将值传给test.jsp。
代码:
在上面的基础上,增加proxy1.jsp里的js:onload body时增加iframe,src=dd/proxy2.jsp。同时获取到main.jsp里要传给test.jsp的参数param2,然后放到url里传给proxy2.jsp。
proxy2.jsp在加载时,通过scriptlet获取到url里的参数param2,并放入到proxy2.jsp的文本框里。js再取这个文本框就获得了main.jsp要传过来的参数。此时proxy2.jsp与test.jsp是同域名同协议同端口,可以互相访问。
- iframe 跨协议访问
- iframe跨域访问
- easyui跨iframe访问
- iframe跨域访问
- iframe跨域访问
- iframe跨域访问
- iframe跨域访问
- iframe跨域访问
- iframe跨域访问
- Iframe跨域访问
- iframe表单跨域访问
- iframe跨域访问问题
- iframe跨域互相访问
- iframe跨域访问cookie、Session
- 跨iframe取属性:拒绝访问
- iframe中页面跨域访问javascript
- JS跨域访问操作iframe
- JS跨域访问操作iframe
- 三种东西永远不要放到数据库里
- ASP.NET 记事本
- 【Linux】Linux下配置jdk环境变量的几种方法
- Allegro带通孔焊盘的制作,相关尺寸设置
- 摄像机线数与IPC的分辨率区别
- iframe 跨协议访问
- FFmepg 多线程解码历程 - 7:submit_packet
- 长假后上了两天班
- 服务器数据库系列 - NoSQL架构实践
- 转:c语言中的字符数组与字符串
- hdu 2048 神、上帝以及老天爷
- 游戏编程精粹
- Java中的继承与多态
- Android中对Log日志文件的分析