我有一个单页面应用程序(SPA)和几个静态页面。每当状态发生变化时,URL都会反映SEO /共享友好的详细信息 - 页面URL,而不是概述页面,其中参数指示当前所选产品(客户的要求 - 不是我的)。因此onbeforeunload我只是为了正确的历史记录操作而添加一个散列URL - 这样当用户访问另一个页面然后点击"返回"时,他们来到SPA之前的状态与SEO友好URL不是散列URL。 Chrome中没有任何功能,所以我检查了其他浏览器。只有Firefox和Safari for Mac似乎可以按照我想要的方式处理所有内容,而Chrome和IE11则没有。我知道Safari会在每个页面加载时抛出一个popState事件,这可能是也可能不是它运行良好的原因。
无论如何,我在这里提出了一个非常简单的例子:http://miketheburns.com/test/js-history/index.html
您可以看到SPA的工作方式:我可以点击产品在URL栏中打开其详细视图和详细URL更改。当我转到另一个页面然后使用历史记录返回按钮时,一切都很好,因为我将历史状态替换为onbeforeunload的哈希版本,并在页面加载后恢复正确的URL。但是如果你然后使用浏览器前进按钮,然后再返回,则不会调用散列版本,而是调用详细版本(在我的示例中抛出404)。无论是散列版本还是未加载散列版本,我都不确定。
这是一个"错误"使用Chrome / IE或"功能"因为他们试图为我预测历史,而不是让我设定它?
在此之前被标记为How to cope with refreshing page with JS History API pushState的副本,我只想说"我知道推动一个不是1的状态并不是最好的做法:1反映了应用程序的实际状态,但绝对应该是可能的,对吧?如果不是我这样做的方式,也许是另一种方式?"
对不起文字的墙(我更喜欢精确而简洁),我欢迎任何和所有的评论。