窗口位置哈希包含点的奇怪行为

3

我从未见过这样的情况,也无法想象。我的URL看起来类似于这样:

 www.site.com/root/path1/path2/123/some-path-1/page.1.2.html

在某个时刻,我会使用哈希值更新URL,这样动态用户交互就能反映URL地址,以便将链接发送给朋友:

 window.location.hash = 'key=SomeValue';

在几乎所有情况下,它对我来说都非常完美,除了当SomeValue包含点号的情况:

 window.location.hash = 'key=SomeValueA.B.';

通过上述URL变为:

 www.site.com/root/path1/path2/123/some-path-1/key=SomeValueA.B.

与其使用www.site.com/root/path1/path2/123/some-path-1/page.1.2.html#key=SomeValueA.B.,不如使用以下方式:

我无法想象这里有什么问题,也无法在jsfiddle中重现它。我为此使用了自定义编写的哈希管理器类:

var hashUrlManager = function(){
 var getHash = function(){       
    return (window.location.hash) ? window.location.hash.substring(1) : "";
 };
 return{
    getHash : getHash,
    getParam : function(k){
        return Util.getParameter(k,"?"+getHash());
    },
    setParam : function(k,v){
        var h = getHash();
        var vNow = hashUrlManager.getParam(k);
        if(vNow==""){
            if(window.location.href.indexOf("#")==-1){
                window.location.hash = k+"="+v;
            }else{
                window.location.hash = h+((h=="")?"":"&")+k+"="+v;
            }
        }else if(vNow!==v){
            window.location.hash = window.location.hash.replace(k+"="+vNow,k+"="+v);                
        }
    },
    removeParam : function(k){
        var v = hashUrlManager.getParam(k);
        var s = k+"="+v;
        if(window.location.hash.indexOf("&"+s)!=-1)s="&"+s;
        window.location.hash = window.location.hash.replace(s,"");
    }
 };
}();

hashUrlManager.setParam('key','SomeValueA.B.');

注意:如果有必要,我会使用History.js和页面上的jQuery。

你是否检查了代码中其余部分是否存在 @window.location@ 的实例?如果你能在应用程序中重现它,但在 jsfiddle 中却不能,那么问题可能发生在你意想不到的地方。 - James Clark
令我惊讶的是,只有哈希中存在点时才会发生这种情况;如果没有点,它在任何时候都有效。 - Vad
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接