我如何让一个JavaScript动作对当前页面有一些影响,但也会改变浏览器中的URL,这样当用户点击重新加载或书签时,就会使用新的URL ?

如果后退按钮可以重新加载原始URL,那就太好了。

我试图在URL中记录JavaScript状态。


当前回答

我强烈怀疑这是不可能的,因为如果是的话,这将是一个令人难以置信的安全问题。例如,我可以制作一个看起来像银行登录页面的页面,并使地址栏中的URL看起来像真正的银行!

也许如果你解释一下为什么你想这样做,人们可能会建议其他的方法……

[2011年编辑:自从我在2008年写了这个答案以来,更多关于HTML5技术的信息浮出了出来,该技术允许修改URL,只要它来自同一个来源]

其他回答

我的代码是:

//change address bar
function setLocation(curLoc){
    try {
        history.pushState(null, null, curLoc);
        return false;
    } catch(e) {}
        location.hash = '#' + curLoc;
}

和行动:

setLocation('http://example.com/your-url-here');

和示例

$(document).ready(function(){
    $('nav li a').on('click', function(){
        if($(this).hasClass('active')) {

        } else {
            setLocation($(this).attr('href'));
        }
            return false;
    });
});

这就是全部:)

有一个jquery插件http://www.asual.com/jquery/address/

我觉得这就是你需要的。

我强烈怀疑这是不可能的,因为如果是的话,这将是一个令人难以置信的安全问题。例如,我可以制作一个看起来像银行登录页面的页面,并使地址栏中的URL看起来像真正的银行!

也许如果你解释一下为什么你想这样做,人们可能会建议其他的方法……

[2011年编辑:自从我在2008年写了这个答案以来,更多关于HTML5技术的信息浮出了出来,该技术允许修改URL,只要它来自同一个来源]

什么是为我工作是- history.replaceState()函数这是如下-

history.replaceState(data,"Title of page"[,'url-of-the-page']);

这将不会重新加载页面,你可以使用javascript的事件

我想知道如果它是可能的,只要在页面上的父路径是相同的,只有新的东西被追加到它。

比如,假设用户在http://domain.com/site/page.html页面 然后浏览器允许我进行定位。Append = new.html 页面变成:http://domain.com/site/page.htmlnew.html,浏览器不会更改它。

或者允许用户改变get参数,这里是location。Get = me=1&page=1。

所以原来的页面变成http://domain.com/site/page.html?me=1&page=1,它不刷新。

#的问题是,当哈希被改变时,数据不会被缓存(至少我不这么认为)。这就像每次加载一个新页面时,而非ajax页面中的后退和前进按钮能够缓存数据,而不需要花费时间重新加载数据。

据我所知,雅虎历史记录已经一次性加载了所有数据。它似乎没有执行任何Ajax请求。因此,当使用div处理不同的方法时,不会为每个历史状态存储数据。