Closed gykpro closed 12 years ago
测试代码: 假设我访问www.iframetest.com
KISSY.use('mvc, node',function(S,mvc, Node){ var $ = Node.all; mvc.Router.navigate('/test1'); document.domain = "iframetest.com" mvc.Router.navigate('/test2') })
第一个能工作,第二个不能工作,会提示没有权限。跟踪代码后发现的目前问题在如下两个地方: 1.2.0/build/mvc.js 501行:
return location.href.replace(/^[^#]*#?!?(.*)$/, '$1');
812行:
location.hash = "!" + path;
根源在这里: 474行
win = window, location = win.location,
重新设置过domain之后 win===window(true) win.location === window.location(true) 但是location === window.location(false) 说明ie8及以下的浏览器,改变domain之后,location对象变成了另一个,而mvc中的location还持有原来的,而导致access denied
解决方法是不要缓存location到变量,而是每次重新取。
对于用户来说,在页面一开始就把要设置的domain设好,可以解决这个问题。
对于 ie67 ,document.domain 只能页面一开始设置,中途设置有问题:
https://github.com/kissyteam/kissy/blob/master/src/mvc/tests/specs/router-domain-error-spec.js
明白了。提issue时只调了ie8
测试代码: 假设我访问www.iframetest.com
第一个能工作,第二个不能工作,会提示没有权限。跟踪代码后发现的目前问题在如下两个地方: 1.2.0/build/mvc.js 501行:
812行:
根源在这里: 474行
重新设置过domain之后 win===window(true) win.location === window.location(true) 但是location === window.location(false) 说明ie8及以下的浏览器,改变domain之后,location对象变成了另一个,而mvc中的location还持有原来的,而导致access denied
解决方法是不要缓存location到变量,而是每次重新取。