Javascript 如何检测用户使用浏览器中的“后退”按钮打开的页面?

Javascript 如何检测用户使用浏览器中的“后退”按钮打开的页面?,javascript,Javascript,这个想法是显示一条消息,当他使用“后退”按钮时,它将告诉缪斯应用程序的ajax部分可能会错误地工作。 是的,有很多讨论,但没有解决方案。 从我的发现中得到的最好结果是:在服务器端存储关于最后一页的信息,并通过ajax对照服务器信息检查当前页面。 但这样,同一用户不可能使用两个浏览器窗口。真正的解决方案是让客户端维护状态,而不是让服务器维护状态。如果你在服务器上保留了太多的客户端状态,以至于“后退”按钮不起作用,那么你就违反了互联网的法律:)真正的解决方案是让客户端维护状态,而不是让服务器维护状态

这个想法是显示一条消息,当他使用“后退”按钮时,它将告诉缪斯应用程序的ajax部分可能会错误地工作。 是的,有很多讨论,但没有解决方案。 从我的发现中得到的最好结果是:在服务器端存储关于最后一页的信息,并通过ajax对照服务器信息检查当前页面。
但这样,同一用户不可能使用两个浏览器窗口。

真正的解决方案是让客户端维护状态,而不是让服务器维护状态。如果你在服务器上保留了太多的客户端状态,以至于“后退”按钮不起作用,那么你就违反了互联网的法律:)

真正的解决方案是让客户端维护状态,而不是让服务器维护状态。如果你在服务器上保留了太多的客户端状态,以至于“后退”按钮不起作用,那么你就违反了互联网的法律:)

你可能想使用url(散列)来存储客户端状态

看看,Flash和ajax使用它来处理ajax浏览器历史


Silverlight 3.0使用了一种类似的技术,即在url中使用#(哈希)表示状态。

您可能希望使用url#(哈希)来存储客户端状态

看看,Flash和ajax使用它来处理ajax浏览器历史


Silverlight 3.0使用了一种类似的技术,即在url中使用#(哈希)表示状态。

此解决方案可能适用于您的情况,也可能不适用于您的浏览器。在IE7上,它似乎对我有用,每个页面都有一个在URL查询字符串中引用的不同的“小部件Id”-

//try to detect a bad back-button usage; 
//widgetId not match querystring parameter did=#
var mustReload = false;
if (location.search != null && 
    location.search.indexOf("&did=") > 0)
{
    var urlWidgetId = location.search.substring(
        location.search.indexOf("&did=")+5);
    if (urlWidgetId.indexOf("&") > 0)
    {
        urlWidgetId = urlWidgetId.substring(
            0,urlWidgetId.indexOf("&"));
    }
    if (currentDashboard != urlWidgetId)
    {
        mustReload = true;
    }
}
if (mustReload)
{
     ... //reload the page to resynch here
}

此解决方案可能适用于您的案例,也可能不适用于您的浏览器。在IE7上,它似乎对我有用,每个页面都有一个在URL查询字符串中引用的不同的“小部件Id”-

//try to detect a bad back-button usage; 
//widgetId not match querystring parameter did=#
var mustReload = false;
if (location.search != null && 
    location.search.indexOf("&did=") > 0)
{
    var urlWidgetId = location.search.substring(
        location.search.indexOf("&did=")+5);
    if (urlWidgetId.indexOf("&") > 0)
    {
        urlWidgetId = urlWidgetId.substring(
            0,urlWidgetId.indexOf("&"));
    }
    if (currentDashboard != urlWidgetId)
    {
        mustReload = true;
    }
}
if (mustReload)
{
     ... //reload the page to resynch here
}

用后退按钮让你的应用程序工作怎么样?如果我没记错的话,大约30%的Web导航是通过后退/前进完成的。请不要破坏我的浏览器chrome。用“后退”按钮让你的应用程序工作怎么样?如果我没记错的话,大约30%的Web导航是通过后退/前进完成的。请不要破坏我的浏览器chrome。我同意让它在返回后工作会更正确。然而,这超出了范围和预算。我同意,让tpo在回来后工作会更正确。但是,这超出了范围和预算。如果不清楚,这种技术意味着内容将始终由站点中的脚本动态加载。这意味着你可以控制所发生的事情,实际上,它会自然而然地表现为没有后退按钮,内容总是会更新。谷歌在Gmail和Orkut网站上使用此选项。@Havenard:->“始终动态加载”不完全正确,您可以使用服务器生成的内容预填充页面(如果没有JS或JS问题,则会优雅地降级),然后当状态更改超过初始加载时,是的,所有内容都是“ajax ed”。但是你是有钱的(+1条评论),如果不清楚,这种技术意味着内容将始终由你网站中的脚本动态加载。这意味着你可以控制所发生的事情,实际上,它会自然而然地表现为没有后退按钮,内容总是会更新。谷歌在Gmail和Orkut网站上使用此选项。@Havenard:->“始终动态加载”不完全正确,您可以使用服务器生成的内容预填充页面(如果没有JS或JS问题,则会优雅地降级),然后当状态更改超过初始加载时,是的,所有内容都是“ajax ed”。但你在赚钱(+1条评论)