YUI浏览器历史管理器后退按钮

时间:2012-05-14 18:12:02

标签: yui browser-history

我正在使用YUI浏览器历史记录管理器来跟踪Ajax导航。我正在注册历史对象,如:

YAHOO.util.History.register("state",init, onStateChange);

这里onStateChange在我做

时被调用
YAHOO.util.History.navigate("state",urlhash);

当我按下后退按钮时。

有没有办法知道onStateChange是在后退按钮上调用还是通过调用navigate?

1 个答案:

答案 0 :(得分:1)

如果外部系统有时会调用此事件(在这种情况下是浏览器后退按钮),并且有时可能由您自己的代码调用此事件,则可以通过在自己的代码调用时执行某些特殊操作来区分调用者。方法。在您自己的帮助方法中包含对navigate()的调用有助于确保您对此保持一致。

在YUI文档中,我看到register()可以使用一个可选的第四个参数(以及其他参数),它是一个将被传递到onStateChange处理函数的任意对象。此对象的一个​​属性可能是一个标志,表示它是从您的代码调用而不是由浏览器启动的,并且在navigate()包装器中始终设置该标志。请记住将其设置回处理程序中。

注意:我不像ExtJS那样熟悉YUI,也许一些知道API更好的大师可以提供帮助,但这是一个可行的一般策略。这个答案做了一个不优雅的假设,即在任何其他导航有机会发生之前调用navigate()会使该处理程序可靠地触发,这在单线程javascript世界中可能是一个安全的选择。