2012-05-14 266 views
1

在使用YUI浏览器历史记录管理器来跟踪Ajax导航。我喜欢注册历史对象:YUI浏览器历史记录管理器返回按钮

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

这里onStateChange获取调用,当我做

YAHOO.util.History.navigate("state",urlhash); 

,当我按后退按钮。

有没有办法知道,如果onStateChange被称为上的后退按钮或致电导航?

回答

1

如果这个事件可以由外部系统有时也被称为(在这种情况下,浏览器后退按钮),并通过自己的代码,有时,你可以通过它的要求做一些特别的区分来电时,您自己的代码调用方法。将call调用到您自己的帮助器方法中的navigate()可以帮助确保您保持与此相符。

在YUI文档我看到寄存器()可以带一个可选的第四个参数(等等),这是将获得通过到您的onStateChange处理函数中的任意对象。该对象的其中一个属性可能是一个标志,指示它是从您的代码调用还是由浏览器启动,并且您的navigate()包装器始终设置该标志。记得把它放回你的处理程序中。

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

+0

yep ....围绕对象包装YUI方法,并使用可选参数来注册方法。作为第四参数,我在当前上下文中传递,并使用该上下文来跟踪导航的调用者。我会很快粘贴我的代码。 – riship89