HTML5 push / replaceState和标记导致安全异常

我有一个位于普通网站子域的网站测试版,例如:
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 举报,一经查实,本站将立刻删除。

相关推荐


h5页面是什么意思
html5复合选择器都有哪些
什么是html5响应式布局
h5页面制作策划怎么做
html5关系选择器有哪些
h5有哪些缓存机制
position中的sticky如何使用
h5页面制作用什么软件
h5链接怎么做
html5层次选择器有哪些
h5是什么意思
localstorage有哪些方法
h5怎么制作点击图标
h5怎么制作倒计时
h5怎么生成链接
h5表格边框怎么设置
h5兼容问题怎么解决
h5怎么做交互设计
h5怎么做进度条
h5怎么加链接