问题标签 [popstate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
77462 浏览

javascript - 我可以防止 history.popstate 在初始页面加载时触发吗?

我正在开发一个通过 AJAX 提供内容的网站。

如果您单击菜单中的一个项目,内容 div 会随着$.get响应而更新,没什么特别的。

我正在实施history.pushState以允许使用浏览器的后退/前进按钮进行导航。

我有以下内容可以在历史导航中加载内容:

问题是,当第一次加载页面时,此函数会$.getScript立即再次加载页面。第一次加载页面时,它呈现初始 HTML 视图,然后在第二次加载时呈现 JS 视图,因为它是一个 JS 请求。

如何防止此事件在带有 HTML 请求的页面上触发?

0 投票
1 回答
829 浏览

jquery - jQuery - 在ajax调用后向DOM添加ticker

我在我的新项目中使用其中一个 jQuery 代码,并且页面是使用 HTML5 History API(pushState 和 popState)加载的。使用 jQuery.getJSON() 加载页面内容后,我会收到警告说“DOM 中不存在元素!” - 我相信它指的是股票代码容器(在 ajax 调用后返回),因为它在内容加载后不起作用。

我试图在 jQuery.getJSON() 的回调函数中再次实例化代码,但这并没有解决问题:

知道什么是解决方案吗?

0 投票
2 回答
2113 浏览

javascript - 为所有浏览器处理 window.onpopstate 的理想方法是什么?

对于 chrome,该事件会在页面加载时触发,但在 Firefox 中,它只会在您按下后退或前进按钮时才会触发。那么如何编写一个适用于所有浏览器的脚本呢?

0 投票
2 回答
51817 浏览

jquery - pushState() 和 popState():操纵浏览器的历史

我正在做一个小项目,我想在其中创建一个 Ajax 风格的网站。内容使用 jQuery 加载load()。正如你们中的一些人所知,这样做的不利方面是 URL 不会根据显示的内容而相应更改。要完成这项工作,您可以使用pushState(). 因为这不支持跨浏览器,所以我使用了插件history.js.

这工作得很好,但问题是我的后退和前进按钮没有正常工作,我不知道我做错了什么。URL 正在正确更改,内容也在更改,但标题根本没有更改。标题我的意思是显示为浏览器窗口的窗口(或选项卡)的标题。即<title>加载的页面或指向该页面的链接的标题属性(它们是相同的)。我认为这与我只调用我需要其标题的页面部分(即通过添加#contentload())这一事实有关。我仍然想要那个页面的标题。这是我到目前为止的测试用例。(自 2013 年 12 月 28 日起不再可用。)jQuery 文件:

我还注意到,当返回到基本页面(即 /sectionLoaderTest/)时,它会暂时变为空白,并且仅在一段时间后才会加载第一页的内容。有没有办法优化这个?

此外,我正在使用 jQuery 向已单击的链接添加一个活动类。我怎样才能确保这会随着历史的变化而改变?以便在用户导航返回时突出显示正确的链接?

所以这三个问题是:

  1. 前进和后退时使标题正常工作
  2. 优化首页加载时间
  3. 前进后退时修正active-class

欢迎大家帮忙!

注意 1:我想在 history.js 和我自己的脚本上构建,因此保持对< HTML5浏览器的支持。我更喜欢这个,因为 1. 我知道这必须有效,只是出了点问题。2. 如果我能看到一个解决方案并在我已经编写的脚本中实现它,而不是找出一个全新的脚本,这将节省时间。

注意 2:赏金只会提供给能够回答我所有问题 (3) 的人!

0 投票
5 回答
9650 浏览

jquery - 如何忽略popstate初始加载,使用pjax

我一直在尝试让前进和后退浏览器按钮在使用 pjax 的小型站点上工作,并提出以下代码来处理类更改和淡入淡出各种覆盖。

但是我发现 Chrome 和 Safari 将初始页面加载视为弹出状态,因此这让我很伤心。有没有办法阻止这一切?

0 投票
1 回答
1752 浏览

jquery - Firefox 中的 jQuery popstate 事件处理

我有这样的东西:

它在 chrome 中就像一个魅力,但在 FF 中不起作用(不触发事件处理程序)。当我将此代码放在就绪块之外时,可以处理事件,但我不喜欢它在就绪块之外。

你知道有什么解决办法吗?干杯。

0 投票
2 回答
6173 浏览

javascript - pushState & popState:Safari 5 不返回 window.history.state

在 Safari 5 中触发我的 popState 时,我似乎无法访问 window.history.state 对象(页面返回)。此代码在 Chrome 19 和 Firefox 12 中完美运行。

Safari 5 中的 console.log(window.history.state) 返回“未定义”。

0 投票
3 回答
2499 浏览

html - 具有部分页面加载的 HTML5 History API 后退按钮

为了提高我网站的性能/响应能力,我使用 AJAX、replaceState、pushState 和 popstate 侦听器实现了部分页面加载。

我基本上将页面的中心部分 (HTML) 作为我的状态对象存储在历史记录中。单击链接时,我仅从服务器请求页面的中心位(使用不同的 Accept 标头标识这些请求)并将其替换为 javascript。在 popstate 上,我抓住前一个中心部分并将其推回 dom。

这大部分工作正常,但是我发现了一个我坚持的特定问题。解释起来有点复杂,所以如果不是很清楚,我很抱歉。

我们的大多数页面上都有一个搜索表单。通过 ajax 加载的部分页面仅适用于 GET 请求,并且表单执行 POST 导致整个页面加载。

如果我浏览以下一组页面,我最终会看到一个格式错误的部分页面,该页面包含中心内容,没有任何周围的 dom:

从主页开始(通过整页加载)- 执行搜索(post-redirect-get) 带
您到搜索结果(通过整页加载)- 然后单击主页
返回主页(通过动态获取)- 单击browser back
Search Results (from popstate listener) - 点击浏览器返回
Malformed home page。

当出现格式错误的主页时,我的 popstate 侦听器根本不存在。

认为正在发生的是,浏览器正在缓存主页的第二次加载(动态,部分),然后当整个页面返回时,浏览器仅显示缓存的部分响应而不是整个页面.

为了解决这个问题,我在响应中添加了一个 Vary: Accept 标头,让浏览器知道内容可能会根据接受标头发生变化。我还在部分加载的内容中添加了 Cache-Control max-age=0、pragma no-cache 和过去的到期日期,以试图强制浏览器不缓存它,但这都不能解决它。

不幸的是,我的公司不允许外部流量到我们的开发服务器,所以我无法向您展示这个问题。我在这里查看了各种类似的问题,但它们似乎都不完全相同,建议的解决方案似乎也不起作用。

如果我在我的动态 GET 请求中添加一个无意义的参数 (blah=blah),这可以解决问题。然而,这是一个丑陋的黑客,我宁愿不这样做。这似乎应该可以通过标头解决,因为我认为这是一个缓存问题。谁能解释发生了什么?

0 投票
1 回答
2259 浏览

html - 在窗口 addEventListener popstate 中调用函数,不起作用

我面临的问题是在 GetAjaxPageBack 函数中,每当我尝试在其中编写任何函数(如 split)或任何其他函数时,它什么都不做,并且如果我注释掉 var url = url.split("?"); 开始工作正常,但为什么我需要拆分 url 并想要获取查询字符串并想要使用 ajax 重新发送它以获取记录。

请帮忙,谢谢

0 投票
2 回答
2739 浏览

webkit - PJAX:后退按钮的问题

我们的一些链接由 PJAX 包装。当用户单击 PJAX 链接时,服务器仅返回 HTML 的必需部分。

如果我执行以下操作:

  1. 点击 PJAX 链接
  2. 点击简单链接
  3. 按下返回按钮

浏览器将显示 PJAX 请求返回的内容。HTML 将被破坏,因为它只是要显示的 HTML 的一部分(检查这个问题)。

我们试图通过不缓存 PJAX 响应(Cache-Control标头)来解决此问题。这解决了我们的问题,但又引发了另一个问题:当用户按下后退按钮时,WebKit (Chrome 20.0) 从服务器加载全部内容,然后触发popstate导致不必要的 PJAX 请求的事件。

是否可以重新创建正确的后退按钮行为?