利用iframe解决一个跨域问题
2014-06-09 09:49
411 查看
今天碰到的问题
两个页面原来都在一个站点 a.com
现在业务拆分,需要把一部分重要的业务放在b.com
但是b.com 需要每次a.com登入登出信息。因为跨域不能调用localStorage等。
想出的解决方案:
每次a.com登入登出时候,新建iframe,src设置一个 b.com 域下“中间页”加入参数并且接收存储到localStorage.代码如下
a.com
b.com/info.html
这样就完美解决了问题。
测试结果:
Android上:UC游览器,qq游览器,chrome,FF 全部通过
IOS:UC通过。但是Safari不通过。
关于Safari不通过,调了一会,发现居然不能用 localStorage!!!(我想Safari没那么弱吧,都是webkit内核,行为不一样)。
报错:"QUOTA_EXCEEDED_ERR: DOM Exception 22: An attempt was made to add something to storage that exceeded the quota."
谷歌之,原来别人也碰到过。
原文:https://github.com/marcuswestin/store.js/issues/42
发现,游览器还有 private browsing mode(隐私/私密/无痕游览模式,各种翻译不同) 一说。
在这个模式下面,将会禁止一些特性,特别是会留缓存写硬盘的事件,比如 history, localstorage, sessionstorage。
各种游览器开启方式:http://browsers.about.com/od/faq/tp/Private-Browsing.htm
有想过用 cookie取代,但是很有肯能有人禁cookie(事实上还有人禁js)。
所以不能两全其美,暂时先用这个方案,有更好的方案就会替代之(//TODO,呵呵)。
两个页面原来都在一个站点 a.com
现在业务拆分,需要把一部分重要的业务放在b.com
但是b.com 需要每次a.com登入登出信息。因为跨域不能调用localStorage等。
想出的解决方案:
每次a.com登入登出时候,新建iframe,src设置一个 b.com 域下“中间页”加入参数并且接收存储到localStorage.代码如下
a.com
var iframe = document.createElement('iframe.html'); iframe.src = 'b.com/info?info=111';
b.com/info.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body> //此页面尽可能简洁,减少手机游览器iframe的开销 <script type="text/javascript"> var href = location.href; var index = href.indexOf("?"); var paramsStr = href.substr(index + 1); var temp = paramsStr.split('='); if (temp[0] == 'info') { localStorage.setItem("INFO", temp[1]); } </script> </body> </html>
这样就完美解决了问题。
测试结果:
Android上:UC游览器,qq游览器,chrome,FF 全部通过
IOS:UC通过。但是Safari不通过。
关于Safari不通过,调了一会,发现居然不能用 localStorage!!!(我想Safari没那么弱吧,都是webkit内核,行为不一样)。
报错:"QUOTA_EXCEEDED_ERR: DOM Exception 22: An attempt was made to add something to storage that exceeded the quota."
谷歌之,原来别人也碰到过。
原文:https://github.com/marcuswestin/store.js/issues/42
发现,游览器还有 private browsing mode(隐私/私密/无痕游览模式,各种翻译不同) 一说。
在这个模式下面,将会禁止一些特性,特别是会留缓存写硬盘的事件,比如 history, localstorage, sessionstorage。
各种游览器开启方式:http://browsers.about.com/od/faq/tp/Private-Browsing.htm
有想过用 cookie取代,但是很有肯能有人禁cookie(事实上还有人禁js)。
所以不能两全其美,暂时先用这个方案,有更好的方案就会替代之(//TODO,呵呵)。
相关文章推荐
- 利用代理页面解决html iframe跨域访问网站问题
- 利用iframe解决跨域信息传递问题
- 利用代理页面解决html iframe跨域访问网站问题
- 利用代理页面解决html iframe跨域访问网站问题
- 利用 iframe解决ajax的跨域问题
- 利用jsonp、iframe和location.hash解决跨域问题
- 某项目要调用现有的100多个DLL 三 先解决为一个类型做一个跨域的问题
- 利用window.name解决跨域问题
- 解决IFrame跨域以及Ajax跨域的问题
- c/c++中利用gsoap调用webservice服务的一个诡异问题解决方法
- fckeditor 在 iframe 跨域 应用问题解决。
- 解决ASP.NET AJAX在frame及iframe中跨域访问的问题
- 使用p3p解决iframe中跨域传递cookie的问题
- IFrame引用跨域站点页面时,Session失效问题解决
- 解决iframe跨域读写Cookies的问题,(ASP、ASP.NET、PHP、JSP)解决方案
- 解决iframe跨域高度自适应问题
- 解决跨域iframe内容读写Cookies的问题
- 利用定位解决一个HTML页面奇怪的布局兼容性问题
- 利用iframe上传文件获取返回值的跨域问题
- 一个利用google文档快速解决docx向doc转换的问题