JKS*_*JKS 8 html5 browser-history
我有一个站点的测试版本位于普通站点的子域,如:http: //test.x.com而不是http://x.com.
我使用<base>标记将所有资源请求转换回原始域:
<base href="http://x.com/" />
Run Code Online (Sandbox Code Playgroud)
在我实现HTML5 push/replaceState支持之前,这种策略很有效.
现在,如果我在控制台中执行此语句:
history.pushState({}, "", "");
Run Code Online (Sandbox Code Playgroud)
...然后我DOMException在基于WebKit的浏览器中获得一个对象:
code: 18
constructor: DOMExceptionConstructor
line: 2
message: "SECURITY_ERR: DOM Exception 18"
name: "SECURITY_ERR"
sourceId: 4839191928
__proto__: DOMExceptionPrototype
Run Code Online (Sandbox Code Playgroud)
...和FireFox 4中的此错误:
Security error" code: "1000
Run Code Online (Sandbox Code Playgroud)
如果我删除<base>标记并执行相同的语句,则会推送新状态,并且没有异常.
一些问题:1)这种行为是安全风险,还是一个bug?并且2)是否有一种解决方法来防止异常,或者除了使用<base>将完全回避问题的标签之外的策略?
谢谢你的考虑.
Use*_*ode 13
这不是一个错误,你违反了同源政策. ""是一个相对URL,'http://x.com/'由于您使用了<base>标记,因此将对其进行解析.http://x.com是一个与托管页面不同的域名,这就是为什么这样做会违反相同的原始政策.
在呼叫中使用指向http://test.x.com/上的资源的绝对URL history.pushState()应解决此问题:
history.pushState({}, "", "http://test.x.com/");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4674 次 |
| 最近记录: |