问题标签 [hashchange]

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 投票
2 回答
1001 浏览

jquery - 启用后退按钮作为 Ajax 应用程序中的“撤消”按钮

我在尝试使用浏览器的“后退”和“前进”按钮时遇到了 Ajax 应用程序的问题。我正在使用 jQuery History 插件来启用浏览器历史记录。

该应用程序由一个产品页面组成。有一个排序栏,使用户能够按各种值对产品进行排序。用户可以选择产品服装类别(连衣裙、上衣、下装、裙子等)、子类别部门(裙子:迷你、超长、高腰、波西米亚风/嬉皮士等)、尺码(XS SML XL XXL XXXL)、颜色(白色、黑色、灰色、蓝色、红色等),以及时代和材料。

大多数选项是通过使用 Ajax 将最新选择的选项加载到适当的 DIV 来启用的。

例如,要选择黑色,将执行以下代码

那么如果用户选择布朗:

然后如果用户取消选择黑色:

只要我们不需要支持后退/前进按钮,这就可以正常工作,但是当通过 jQuery History 添加后退按钮功能时,我们会遇到问题。例如:使用我们之前的示例,用户选择了黑色和棕色。现在假设用户单击后退按钮。用户希望他们的棕色选项被删除,但事实并非如此,因为正在加载的 URL 是:

并不是

这就是它需要的。

我尝试通过将一组“撤消”参数附加到查询字符串来解决这个问题。例如,

包含双斜杠之前的当前查询字符串和斜杠之后的“后退”查询字符串。所以使用这段代码,如果我知道点击了一个新链接,我可以加载当前的查询字符串(在斜杠之前),如果我知道点击了后退按钮,我可以加载斜杠后面的“后退”查询字符串.

但问题是似乎没有任何方法可以检测是否单击了后退/前进按钮。jQuery History 在 hashchange 事件下运行,并且该事件对于触发它的事件没有区别(据我所知)。

这是我的问题。如果 StackOverflow.com 的超级聪明人能帮助我找到解决方案,我将不胜感激。谢谢!

0 投票
2 回答
3047 浏览

javascript - onHashChange 在 Safari 中有效吗?

是否在 Safari 中工作onHashChangehashChange我在 Windows 7 上使用 Safari 4.0.4 对其进行了测试,但它对我不起作用。

如果它不起作用,是否有任何解决方案来跟踪是否hash已更改?

0 投票
4 回答
8235 浏览

javascript - Javascript : onHashchange 测试

我正在尝试以onHashChange这种方式检查浏览器是否支持或不隐藏一些代码:

我也试过这个:

Quirksmode中所述,这应该可以工作,但是如果我alerttrue statein 中进行操作,则会Safari提醒我,但 Safari 不支持onHashChange:S

它有什么问题?如果我不正确,我应该如何检查它?

0 投票
2 回答
8183 浏览

javascript - 跨域哈希变更通信

请考虑以下两个域:domain1.com 和 domain2。

从 domain1 我打开一个指向 domain2 的 iframe。

现在,我希望这些人能够相互通信,我已经通过在两个域上应用哈希更改事件侦听器成功地实现了这一点。

这样,如果 domain2 使用新的哈希调用 parent.location,父窗口 (domain1) 中的哈希就会触发。此外,如果我从父级将其 src 属性更改为新哈希,则会在 iframe 中触发哈希更改事件。

这很好用!

麻烦来了:

浏览器中的后退和前进功能变得混乱。简单地说,通过创建两个哈希实例,浏览器后退按钮必须单击两次才能更改父哈希,因为它必须首先循环遍历 iframe 的哈希。

如何在不搞砸历史对象的情况下与跨域 iframe 2 方式通信?

谢谢!

0 投票
2 回答
1313 浏览

javascript - DOMNodeInserted 或 hashchange

我正在尝试编写一个“覆盖”在 Facebook 页面顶部的 JavaScript 脚本。它使用 DOMContentLoaded 来检测何时加载内容,然后添加一些额外的内容。但是,由于 Facebook 在转到新页面时实际上并没有“重新加载”页面(它只是使用 AJAX),所以 DOMContentLoaded 处理程序不会运行再次,即使有新的东西要浏览。

无论如何,为了检测更改,我考虑使用 onhashchange 因为 Facebook 曾经更改页面的哈希值,但是在 Firefox 4 中(我需要支持 Firefox 3 及更高版本,但没有其他浏览器),Facebook 不会更改哈希值不再,在 Firefox 3.6 之前的版本中没有 onhashchange。

我考虑过使用 DOMNodeInserted,但这真的会减慢页面速度吗?(我真的不能在这个脚本中放慢速度。)

0 投票
2 回答
3647 浏览

javascript - 仅带有浏览器按钮的 Onhashchange

我遇到了这个问题(我正在使用 jQuery,但不限于此):

我正在使用锚导航 (#id) 和 Ajax 请求的组合。为了让页面移动到位(使用锚导航)或获取信息(使用 Ajax),我使用了 onhashchange 事件。

编辑:我有一点错字。我忘记检查 mouseDown 标志是否为真并且 hashchange 事件是否被触发,所以我添加了 if 语句。

使用 jQuery,它看起来像这样:(当然,这段代码被包装在一个函数中并在 DOM 加载时初始化,但对于这个问题并不重要)

为了确保只有支持 onhashchange 的浏览器才能读取我这样封装的代码:

我的网络应用程序是这样制作的,我只希望在我点击浏览器中的后退/前进按钮时触发 onhashchange 事件。为此,我这样做:

现在,如果我在视口内单击,我将触发 mousedown 事件。如果触发了 mousedown 事件,我知道我没有单击浏览器的后退/前进按钮,我可以使用如下标志停止 onhashchange 事件:

这会导致 IE 出现问题,因为它使您无法将鼠标事件绑定到窗口对象 (?)。IE 永远不会“看到”mousedown 事件。

为了解决这个 IE 问题,我可以使用“clientY”属性。此属性在 IE 中的所有事件调用中传递,并告诉您鼠标的坐标。如果 e.clientY 小于 0,则鼠标在视口之外,我会知道我通过单击浏览器的后退/前进按钮触发了 onhashchange。现在看起来像这样:

在我不得不添加对使用键盘上的箭头导航的支持之前,这个解决方案就像一个魅力。现在,鼠标在屏幕上的位置无关紧要。只要 IE 窗口处于“活动状态”,在敲击键盘时就会触发监听键盘输入的 keydown 事件。这意味着 clientY 检查不再按预期工作。

问题:

据我所知,onhashchange 必须绑定到 window 对象。如果我希望能够通过侦听另一个事件来控制一个事件,则必须在同一个回调函数中处理所有事件。

我怎样才能让它工作?

0 投票
2 回答
5833 浏览

jquery - ajax 使用锚链接加载内容?现场处理程序?

嘿伙计们,我正在使用 ajax 从子站点加载 div。这个子网站有一个这样的链接:

我的 ajax 请求被触发的主页有这个#someIDonHomepage div,我希望我的页面跳转到那个位置。

但是,由于我正在使用 ajax 加载锚点,所以这不起作用。

知道我该如何解决吗?

我用 jquery 编写了这个动画滚动脚本,它在单击锚点时动画跳转。

知道我该如何解决吗?谢谢你

0 投票
1 回答
307 浏览

css - IE7/8 & Hashchange 插件 CSS 问题注意事项

http://iamwhitebox.com/staging/arkitek/#press/index.htm
http://iamwhitebox.com/staging/arkitek/#contact/index.htm

为什么这些浮点数会在 IE 中中断?

而且,有没有人对'jquery.ba-hashchange.min.js'有任何经验如何让hashchange不那么......丑陋?

谢谢

0 投票
4 回答
7541 浏览

javascript - Backbone.js 仅在 IE7 中导致错误

我正在使用后端的 CodeIgniter 和前端的 Backbone.js 开发一个 Web 应用程序。我还使用 HTML5 Boilerplate 作为我的开始模板。

我使用 Backbone 的 Controller 和 History 作为应用程序的主要导航。我过去做过一次,一切正常。问题是,当我使用 Backbone.History.start() 开始 hashchange 事件捕获并单击链接 example.com/#home 时,url 中的哈希更改,事件被触发但 2 秒后,哈希被清除从 url 和 javascript 错误仅在 ie7 中引发。

我查看了源代码,并且在 IE7 中实现了 hashchange 事件,方法是创建一个 IFRAME,运行一个间隔来检查哈希值的变化。

以前有人遇到过这个奇怪的错误并知道如何解决吗?

0 投票
3 回答
5976 浏览

internet-explorer - onhashchange 与 IE 9

我有以下代码

我单击一个更改哈希的链接,在所有其他浏览器中我收到警报test

但是在 IE 中,我收到第一个警报,说它支持 onhashchange,但是当哈希更改时,什么也没有发生。

有任何想法吗?