让用户在同一站点内手动导航到新URL,而不刷新页面

时间:2013-03-19 21:36:28

标签: javascript html html5

对于新的Web应用程序,我想在用户单击链接时修改历史记录,以便URL更改,但页面不会重新加载。我将在ajax中加载一部分页面。这可以很容易地完成,并记录在很多地方(例如Mozilladiveintohtml5Stack Overflow)。

但是,我想知道是否有办法让用户修改URL而不重新加载页面。例如,有人在同一个域中为他们提供了一个链接,或者他们想要出于某种原因手动输入URL。我想以与点击链接相同的方式加载新页面 - 无需重新加载页面而是修改历史记录。

有没有办法做到这一点?这是我思考的要点,但需要实现神奇的函数getNewURLFromEventpreventUserFromActuallyLeavingPagecarryOn(如果可能):

window.addEventListener('unload', function(event) {
    var newURL = getNewURLFromEvent(event);

    if (isInThisDomain(newURL)) {
        preventUserFromActuallyLeavingPage();
        window.history.pushState('content', 'title', document.URL);
    } else {
        // Let the user leave (the internet is a free place after all)
        carryOn();
    } 
});

function isInThisDomain(URL) {
    /* Would probably implement some error checking here too */
    var thisDomain = document.URL.match(/:\/\/(.+?)\//)[1],
        thatDomain = URL.match(/:\/\/(.+?)\//)[1]);

    return thisDomain === thatDomain;
}

function getNewURLFromEvent(e) {
    /* Figure out where the user want's to go */
}

function preventUserFromActuallyLeavingPage() {
    /* Since we're changing the content it still looks
        like the user's leaving, but really they haven't
        gone anywhere from the site's perspective */
}

function carryOn() {
    /* Essentially do nothing, but maybe more magic is needed? */
}

如果你认为这是一个坏主意 - 但仍然可能 - 请解释为什么这是一个坏主意。

谢谢。

1 个答案:

答案 0 :(得分:0)

除了使用URL哈希之外,地址栏的任何更改都将指示浏览器转到该位置。您不能(也不应该)更改此行为。这将打开一大堆关于URL隐藏和其他恶意软件肮脏的蠕虫。