【问题标题】:History.js PushState in html 4 browser (IE) changes the url incorrectlyhtml 4 浏览器 (IE) 中的 History.js PushState 错误地更改了 url
【发布时间】:2013-09-10 07:33:41
【问题描述】:

我使用 History.js 来推送一个 url,但在 IE 中它会附加页面名称。

如果我的原始网址是: http://www.mydomain.com/Home.aspx

然后我执行以下操作:

var url = window.location.protocol + '//' + window.location.host + '/Home.aspx?id=2&pl=4'; History.pushState(null, null, url)

在 Chrome 中,我的网址变为:http://www.mydomain.com/Home.aspx?id=2&pl=4

在 IE 8 中,我的网址变为:http://www.mydomain.com/Home.aspx#Home.aspx?id=2&pl=4

如果我将 IE 8 url 粘贴到 chrom 中,我的代码将失败...

首先,正确的 html 4 url​​ 应该是什么样子,其次,我该如何解决?

【问题讨论】:

  • 您的问题是 # 之后的所有内容都没有发送到服务器。所以 mydomain.com/Home.aspx 永远不会得到哈希后的 id 和 pl。
  • 你得到的是预期的,我在我们的客户网站上使用它,它的行为方式与你给出的相同,而且效果很好。带有 Hash 的 URL 也可以在 Chrome 浏览器中正常工作。

标签: url history.js html4


【解决方案1】:

我相信您没有正确推送状态,请尝试重新格式化您推送的网址,例如History.pushState({data: 'home'}, null, '/Home/').

或者您可能认为推送状态也会向服务器发送请求,就像您在查询时所做的那样?它没有哥们。

因此,不要期望通过将您推送到其他浏览器的状态粘贴到其他浏览器中来进行任何操作。首先,因为其他浏览器没有关于您网站的历史记录,其次您需要使用 History 捕获 statechange 事件。

例如

History.Adapter.bind(window, 'statechange',
       function() {
         if (History.getState().data.page === 'home') {
           //do what u would like with current state
         }
     );

【讨论】:

  • statechange 事件不是问题。这一切都有效。如果我按下“/Home/”,然后将该页面添加为书签,然后重新加载该页面,它将无法正常工作,因为 asp.net 在主页末尾期待“.aspx”...我在 Sharepoint 网站上运行它。
猜你喜欢
  • 1970-01-01
  • 2014-10-21
  • 2015-06-23
  • 2011-02-06
  • 1970-01-01
  • 2016-01-07
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多