0

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

当您单击一篇文章时,它会更改为使用推送状态的地址。

例子:

http://www.some-site.com/news/ - 点击新闻之前

http://www.some-site.com/news/dynamic-url/ - 点击新闻后

但由于 pushstate 在 IE 或更旧的浏览器中不起作用,我已将其重写为使用 jQuery.address,因此它会更改 url 中的哈希值,而仅适用于 IE。

现在的问题是,假设有人将指向该站点的链接发送给他们从 Chrome 复制的朋友并且他们的朋友使用 IE,它将开始将新的链接附加到该 URL。

例子:

http://www.some-site.com/news/dynamic-url/ - 发送给朋友的 URL

http://www.some-site.com/news/dynamic-url/#!/dynamic-url - 朋友访问该网站后的 URL

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

https://twitter.com/#!/google被重定向到https://twitter.com/google并且它在 IE 中工作。

非常感谢任何帮助,如果您不明白,请让我详细说明。

正如大卫托马斯所建议的,这里是函数。

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);
}
4

2 回答 2

0

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

明白了吗?

于 2012-09-25T12:10:25.113 回答
0

想了很久,只能找到一个解决办法。

如果有人遇到类似情况,我会在这里发布。

我的解决方案有点老套。如果浏览器是 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);
            }
        }
    }
});
于 2012-09-26T12:42:22.870 回答