最近做一个项目,改动到了两个页面(A,B):在A页面(aa.example.com/a.html)往localStorage写一个key,然后在稍候的B页面(bb.example.com/b.html)读出来。结果是写的时候成功了,在A页面也读出来了,跑到B页面,localStorage却是空的!
别急,待俺掐指一算……嗯,子域不同,localStorage应该也是不一样的。在A页面的逻辑完成的时候,跳转到bb.example.com/a.html 进行设置key的话,写key和读取key都是同一个域了。
结果……啊,我要崩溃,还是读不出来!但是t它(A,B)的上一个版本是可以的,为虾米呢?
moreGoogle N久,没谷着,没办法了,一行一行找!
然后……这样……那样……接着……
5555……别拉着我,我要去砍死写这行代码的那个家伙!(喂喂,真不拉着我呀)
重新唤回A页面,加上document.domain=“example.com”;然后,写!跳到B页面,OMG,总算可以了,呼~
后话:话说用localStorage也蛮长时间了,只是从来没想过localStorage会跟cookie一样受到跨域的限制,会被document.domain影响,嗯,这就是学艺不精还不认真看文档的后果……
嗯,附上W3C的说明一份,不用钱的。^_^
4.3.1 Security
User agents must throw aSecurityError
exception whenever any of the members of a[Storage](http://www.w3.org/TR/webstorage/#storage-0)
object originally returned by the[localStorage](http://www.w3.org/TR/webstorage/#dom-localstorage)
attribute are accessed by scripts whose effective script origin is not thesame as the origin of theDocument
of theWindow
object on which the[localStorage](http://www.w3.org/TR/webstorage/#dom-localstorage)
attribute was accessed.
This means[Storage](http://www.w3.org/TR/webstorage/#storage-0)
objects are neutered when thedocument.domain
attribute is used.
多tab的跨域通信有啥方法?
@koala 这个可以用flash中转, 或者用iframe来代理
html5 中有个globalStorage 对象可以跨域,但是很多浏览器不支持。
@郭小铭 长见识了,还真的没了解过喔
在github上发现了一个库,使用了一个crossd_iframe.html充当信使实现的跨域!<br><a href='https://github.com/juanrmn/localStorage-tools' rel='nofollow noopener' title=''></a>
<a href='https://github.com/juanrmn/localStorage-tools' rel='nofollow noopener'>localStorage-tools</a>
@Dreamlu 谢谢分享, 了解下