浏览器后退按钮跳转到最后一个位置(如 maps.google.com)

Posted

技术标签:

【中文标题】浏览器后退按钮跳转到最后一个位置(如 maps.google.com)【英文标题】:Browser Back-Button jump to last location (like maps.google.com) 【发布时间】:2012-03-23 15:24:36 【问题描述】:

我要做的是转到 Google 地图中的某个位置(通过搜索或仅通过拖动地图)。现在我在地址栏中输入另一个 URL,然后按回车键转到该站点。

当我使用浏览器返回按钮时,谷歌地图会自动切换回我上次所在的位置。

如果我拖动地图并且没有在 Google 地图网站上使用某种“POST”,该怎么办?我想在我自己的 google 谷歌地图应用中也有同样的行为。

我正在使用 Google Maps API for javascript v3

【问题讨论】:

【参考方案1】:

我不知道 GMaps 是否为此提供了方便的方法,但通常此类功能基于 html5 history.pushState(),可让您将自定义步骤添加到导航历史记录并观察用户何时返回:

https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history

如果您想以这种方式处理更高级的应用程序状态,可以在其上构建几个框架,例如Backbone router, LeviRoutes.

在 HTML4 浏览器中,pushState 可以是 emulated with fragment identifiers(哈希 URL)。

【讨论】:

感谢这种通用方法 - 我可能会采用 Turek 指出的解决方案(以及最后一句中的您),但很高兴了解 pushState()。【参考方案2】:

首先,您只需在地图上查找名为“dragend”的事件

google.maps.event.addListener(map, 'dragend', function() 

);

然后您需要使用 getCenter() 获取您的坐标并将您的浏览器重定向到“#coordinates”,它不会在您使用哈希时重新加载您的窗口,但它会将其保存在历史记录中。

coords = map.getCenter();
window.location = '#' + encodeURI(coords);

现在您需要添加侦听器来检查 URL 中的任何“哈希”更改(假设您有 jQuery)

$(window).bind('hashchange', function () 
    var hash = window.location.hash.slice(1);
);

最后你需要告诉你的地图改变坐标和解码 url

hash = decodeURL(hash);
map.panTo(hash);

您可以使用 setCenter() 代替 panTo(),但它会在单击后退按钮时添加一些漂亮的动画。

更改此代码以用于您搜索的位置非常容易,您可以使用事件“center_changed”而不是“dragend”,它会处理所有事情。

我写的所有内容都在这里:

https://developers.google.com/maps/documentation/javascript/reference#Map

希望对你有所帮助。

【讨论】:

谢谢 - 这听起来是一个合理的方法,我会在解决后立即提供反馈。 我开始认为这对我来说是一种非常不干净的方式。然后事情是,我必须存储的不仅仅是坐标,我不希望 URL 中的所有内容都可见,它也不必是可收藏的。有趣的是,谷歌地图也不使用标签。而且我认为它甚至不使用浏览器的历史记录。我不知道他们是怎么做到的...... 您实际上不需要将坐标存储在哈希中,例如,您可以保存城市...在这种方法中,无论如何您都可以在网站上的某处生成标记数组,因此您可以参考您的散列到该信息... $(window).bind...() 行是否也在dragend 事件中?

以上是关于浏览器后退按钮跳转到最后一个位置(如 maps.google.com)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用浏览器后退按钮跳转到Redux状态

js如何使浏览器的后退和前进功能失效(IE FF 谷歌)

点击按钮跳转到下一题js

javascript限制浏览器后退

为啥在c#,mvc中退出并按下浏览器后退按钮时会转到一个页面

谷歌浏览器后退按钮input内值丢失的问题