我有一个网站的测试版本,位于正常网站的子域中,例如:http://test.x.com http://test.x.com代替http://x.com http://x.com.
我用<base>
标签将所有资源请求转换回原始域:
<base href="http://x.com/" />
在我实现 HTML5 Push/replaceState 支持之前,这种策略一直很有效。
现在,如果我在控制台中执行此语句:
history.pushState({}, "", "");
...然后我得到一个DOMException
基于 WebKit 的浏览器中的对象:
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>
tag 并执行相同的语句,新的状态被推送,并且没有异常。
有几个问题:1)这种行为是安全风险还是错误? 2)是否有解决方法来防止异常,或者除了使用<base>
标签可以完全回避这个问题吗?
感谢您的考虑。
这不是一个错误,你违反了同源政策 http://en.wikipedia.org/wiki/Same_origin_policy. ""
是一个相对 URL,将被解析为'http://x.com/'
自从你使用了<base>
tag. http://x.com http://x.com与托管页面的域不同,这就是为什么这样做会违反同源策略。
使用指向资源的绝对 URLhttp://test.x.com/ http://test.x.com/在你的history.pushState()
调用应该解决这个问题:
history.pushState({}, "", "http://test.x.com/");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)