使用frame框架解决部分跨域访问问题思路
a. iframe、frameSet、ifame使用及解决部分跨域访问问题
应用场景:
1> 一个jsp页面中, 嵌套调用了一层ifame;
2> 而这ifame中内嵌的页面,其实对应了一个frameSet, 此frameSet被分割上下两部分: topFrame、 mainFrame
那问题来了:
若在当前页面显示,调用mainFrame中效果:比如显示多级菜单等,就会涉及到跨域访问问题,(top.mainFrame.location.href=XXXX) 等就不能直接做使用了,但是解决的思路也很简单,就是
top = parent;
基本就可以解决问题了!
原因在于,在C/S编程的系统中,可能会有经常使用到类似这种需求,其实就是windows对象下top、parent、self、blank使用不是很清楚。
b. top、parent、self、blank应用场景
1> top: 整个浏览器窗口;
2> parent: 对应父级窗口;
3> self: 本窗口;
4> blank: 新窗口。
针对前面的应用场景,其实就是三层的框架嵌套,这里简单解释一下:
i> 若只是一个页面,则 top = parent = self;
ii> frame嵌套的两层页面,则 top = parent --> self (这里具体看是哪一层,若是第二层,则包含关系; 若第一层,则同i);
iii> 针对上面的应用场景,则是三层嵌套的,则 top --> parent --> self(具体看要使用哪一层了)。
c. 解决view页面中跨域访问内嵌页面域值问题
一个可行的方式,是使用给内嵌的frame设置id,然后根据id一路去取,从外到里 或 从里到外 这么来取,还是可行的。
d. 跨域访问,解决session丢失的问题
问题根源:
IE6/IE7支持的P3P(Platform for Privacy Preferences Project (P3P) specification)协议默认阻止第三方无隐私安全声明的cookie,Firefox目前还不支持P3P安全特性,firefox中自然也不存在此问题了。Mircosoft对此的具体描述可以参见 Privacy in Internet Explorer 6.
解决办法是在要嵌入的内容中(iframe指向的站点)输出P3P的主机头声明:
jsp:
response.setHeader("P3P","CP='IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT'") .
thanks!
Author: liguohu09@gmail.com
Date: 2012-02-07