终于彻底的解决了上网的问题[zt]
2008-03-17 20:22
239 查看
3.4、iframe+location.hash
这种方法比上面两种稍微繁琐一点,原理如下:www.a.com下的a.html想和www.b.com下的b.html通信(在a.html中动态创建一个b.html的iframe来发送请求);
但是由于“同源策略”的限制他们无法进行交流(b.html无法返回数据),于是就找个中间人:www.a.com下的c.html(注意是www.a.com下的);
b.html将数据传给c.html(b.html中创建c.html的iframe),由于c.html和a.html同源,于是可通过c.html将返回的数据传回给a.html,从而达到跨域的效果。
三个页面之间传递参数用的是location.hash(也就是www.a.html#sayHello后面的'#sayHello'),改变hash并不会导致页面刷新(这点很重要)。
具体代码如下:
www.a.com/a.html
www.b.com/b.html
www.a.com/c.html
原因是在c.html中修改 a.html的dom或者变量会导致页面的刷新,a.html会重新访问一次b.html,b.html又会访问c.html,造成死循环……囧呀~
所以只能通过location.hash了。这样做也有些不好的地方,诸如数据容量是有限的(受url长度的限制),而且数据暴露在url中(用户可以随意修改)……
3.5、postMessage(html5)
html5中有个很酷的功能,就是跨文档消息传输(Cross Document Messaging)。新一代浏览器都将支持这个功能:Chrome 2.0+、Internet Explorer 8.0+, Firefox 3.0+, Opera 9.6+, 和 Safari 4.0+ 。使用方法如下:
otherWindow: 对接收信息页面的window的引用。可以是页面中iframe的contentWindow属性,window.open的返回值等。
message: 所要发送的数据,string类型。
targetOrigin: 用于限制otherWindow,“*”表示不作限制。
www.a.com/a.html中的代码:
html:
3.6、使用flash
由于本人对flash不怎么熟悉,此处暂时忽略之~3.7、Cross Frame
行文至此,突然在口碑网UED博客上看到了一篇 《跨域资源共享的10种方式》,对跨域的多种方法都有介绍(虽然有源码,但多数都是直接调用YUI库的,比较难看出原理)。里面提到了Cross Frame这种方法,似乎挺不错的,改日一定翻源码来研究。
4、总结
研究了几天,虽然对多种跨域方法都有所了解了,但是真要投入应用还是明显不够的(还是需要借助一些js库)。每种方法都有其优缺点,使用的时候其实应该将多种跨域方法进一步封装一下,统一调用的接口,利用js来自动判断哪种方法更为适用 。
相关文章推荐
- IBM T60 开双核上网死机的问题终于解决了
- 彻底解决联想手机数据连接不能上网问题(无需恢复出厂设置) 本文来自移动叔叔论坛 ,详细出处请参考:http://bbs.ydss.cn/thread-201115-1-1.html
- 终于开发完了12306订票系统 彻底解决负载 刷新 404等问题
- 彻底地/ 终于地, 解决 关于apache 权限的问题了:: 修改 DocumentRoot后的 403错误: have no permission to access / on this server
- IPtables终于可以使用了,客户机不可以上网的问题解决了
- jboss get请求中文乱码问题的解决[zt]
- Linux下MySQL 5.5/5.6的修改字符集编码为UTF8(彻底解决中文乱码问题)
- 局域网内部服务经常掉线的问题终于解决了
- 彻底解决COM端口被占用(在使用中)问题的办法
- android.view.WindowLeaked 问题彻底解决【dialog导致窗口泄露】
- redhat6.3下解决不能上网问题
- 解决Linux不能上网问题
- 能上QQ,但不能上网问题精解 ZT
- iOS 修改网络图片的大小 宽和高,终于解决了这个问题
- Trident Designer Package 包加载错误的问题,终于解决了!
- 终于解决了PADS,Altium,ORCAD的相互转换问题
- 终于解决“Git Windows客户端保存用户名与密码”的问题zhz
- 终于解决那个remoting项目的问题了...
- phpcms V9二级目录下分页路径不正确问题的彻底解决方法