0

我正在使用 History.js,我正在尝试获取一个作为 Google Plus 网址的网址。

(function(window, undefined){


var History = window.History; // Note: We are using a capital H instead of a lower h
if ( !History.enabled ) {
     // History.js is disabled for this browser.
     // This is because we can optionally choose to support HTML4 browsers or not.
    return false;
}


History.Adapter.bind(window, 'statechange', function(){ // Note: We are using statechange instead of popstate

    var State = History.getState(); // Note: We are using History.getState() instead of event.state
    History.log(State.data, State.title, State.url);
    console.log(State.data.page);
});



$('.item').live('click', function(e){
    e.preventDefault();
    var url = $(this).children(1).attr('href');
    $(document).remove('#content');
    $('#loaded').load('/controlpanel' + url + '.php #content');
    History.pushState({page: url + '.php'}, "Prova Pagina", History.getRootUrl() + 'controlpanel' + url); // logs {state:1}, "State 1", "?state=1"
});

})(窗户);

这个脚本在我点击链接时有效,但是当我手动刷新页面时,我已经点击了一个链接并且 url 变为http://www.mysite.com/something/page,浏览器给了我一个404 错误。我该如何解决?

我想获得类似的东西:https: //plus.google.com/explore

4

1 回答 1

0

即使 JS 允许你不重新加载整个页面,URL 应该仍然可以在服务器端访问,以便直接访问链接的人会看到一些东西(更不用说优雅降级了)。

此外,您必须在锚链接上添加点击处理程序,以便您可以阻止默认操作(转到链接)并使用该pushState方法更改 URL。像这样的东西:

document.body.onclick = function( e ) {
    var evt = e || window.event,
        target = evt.target || evt.srcElement // Get the target cross-browser

    // If the element clicked is a link
    if ( target.nodeName === 'A' ) {

        // Use the History API to change the URL
        History.pushState() // Use the library correctly

        // Don't forget to return false so that the link doesn't make you reload the page
        return false
    }
}

这绝对不是生产代码(您应该检查外部链接,而不是绑定到正文等),但您明白了。

于 2012-04-20T12:09:29.307 回答