Javascript 重写URL哈希以获取变量

Javascript 重写URL哈希以获取变量,javascript,jquery,.htaccess,url-rewriting,Javascript,Jquery,.htaccess,Url Rewriting,我在一个有动态内容的网站上工作 单击文章时,它将使用推送状态更改为地址 例如: -单击新闻项目之前 -点击新闻项目后 但是由于pushstate在IE或更老的浏览器中不起作用,我将其重写为使用jQuery.address,因此它只更改IE的url中的哈希值 现在的问题是,如果有人将该网站的链接发送给他们从Chrome复制的朋友,而他们的朋友使用IE,那么该链接将开始在该url中添加新的has 例如: -发送给朋友的URL -朋友访问网站后的URL 所以,我被困在如何重写/重定向它们上。因为,散列

我在一个有动态内容的网站上工作

单击文章时,它将使用推送状态更改为地址

例如:

-单击新闻项目之前

-点击新闻项目后

但是由于pushstate在IE或更老的浏览器中不起作用,我将其重写为使用jQuery.address,因此它只更改IE的url中的哈希值

现在的问题是,如果有人将该网站的链接发送给他们从Chrome复制的朋友,而他们的朋友使用IE,那么该链接将开始在该url中添加新的has

例如:

-发送给朋友的URL

-朋友访问网站后的URL

所以,我被困在如何重写/重定向它们上。因为,散列永远不会被发送到Apache。 我在推特上看到过,他们做的正是我想要的,但我不知道怎么做

被重定向到,它在IE中工作

非常感谢您的帮助,如果您不理解,请让我详细说明

正如David Thomas所建议的,函数如下

var permalink = function(title, id, permalink){
    var current = siteUrl + type + (order ? '/orderBy/' + order : '');
    var newUrl = current + '/' + permalink + '/';
    if(jQuery.browser.msie){
        newUrl = '/' + permalink + '/';
        jQuery.address.value(newUrl);
    }
    else{
        stateNum++;
        window.history.pushState({state: stateNum}, title, newUrl);
    }
    jQuery('title').html('SITE - ' + title);
}

您需要做的是使用插件(如jqueryhistory)或自己创建一个事件来检查哈希更改。然后,读取散列(去掉“!”),然后根据需要处理散列。您可能希望使用它来执行ajax(例如加载域/散列),并将内容放在页面的某个位置


明白了吗?

经过一段时间的思考,我只能找到一个解决方案

我会把它贴在这里,以防有人遇到类似的情况

我的解决方案有点老套。如果浏览器是IE,并且在某个点后有一段url,我将其作为新闻项的名称。一旦我有了名字,我就将它们重定向到合适的url

var permalink = function(title, id, permalink){
    var current = siteUrl + type + (order ? '/orderBy/' + order : '');
    var newUrl = '/' + permalink + '/';
    if(jQuery.browser.msie){
        jQuery.address.value(newUrl);
    }
    else{
        current = siteUrl + type + (order ? '/orderBy/' + order : '');
        newUrl = current + '/' + permalink + '/';
        stateNum++;
        window.history.pushState({state: stateNum}, title, newUrl);
    }
    jQuery('title').html('SITE - ' + title);
}
jQuery(document).ready(function(){
    jQuery.address.crawlable(true);
    if(jQuery.browser.msie){
        if(jQuery.address.value() == '/'){
            var currentPermalink = window.location.toString();
            currentPermalink = currentPermalink.split(type);
            if(currentPermalink[1] !== '/'){
                window.location = siteUrl + type + '/#!' + currentPermalink[1];
                jQuery.address.value(newUrl);
            }
        }
    }
});

整个站点工作正常,当您加载页面时,它会动态加载内容,并且还会更改散列。问题是,如果你转到IE中的页面,它会将哈希附加到旧URL上。比如在我的例子中,我认为你必须发布这个函数,因为你在这里得到的任何答案都应该或者将会与这个函数集成。Twitter想要这样做。这要简单得多。你真的需要在IE上提供AJAX支持吗?AJAX支持只需要在IE9中工作,但仍然没有帮助,因为它不支持pushstate。