我有一个位于普通网站子域的网站测试版,例如:
http://test.x.com而不是 http://x.com.
http://test.x.com而不是 http://x.com.
我使用< base> tag将所有资源请求转换回原始域:
<base href="http://x.com/" />
在我实现HTML5 push / replaceState支持之前,这种策略很有效.
现在,如果我在控制台中执行此语句:
history.pushState({},"","");
…然后我在基于WebKit的浏览器中获得一个DOMException对象:
code: 18 constructor: DOMExceptionConstructor line: 2 message: "SECURITY_ERR: DOM Exception 18" name: "SECURITY_ERR" sourceId: 4839191928 __proto__: DOMExceptionPrototype
…和FireFox 4中的此错误:
Security error" code: "1000
如果我删除< base>标记并执行相同的语句,推送新状态,并且没有异常.
几个问题:1)这种行为是安全风险,还是一个bug?并且2)是否存在防止异常的解决方法,或者除了使用< base>之外的策略.将完全回避问题的标签?
谢谢你的考虑.
解决方法
这不是一个错误,你违反了
Same origin policy.“”是一个相对的URL,它将被解析为’http://x.com/’,因为你使用了< base>标签.
http://x.com是一个与托管页面不同的域,这就是为什么这样做会违反相同的原始策略.
在history.pushState()调用中使用指向http://test.x.com/上的资源的绝对URL应解决此问题:
history.pushState({},"http://test.x.com/");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。