我正在使用YUI浏览器历史记录管理器来跟踪Ajax导航。我正在注册历史对象,如:
YAHOO.util.History.register("state",init, onStateChange);
这里onStateChange在我做
时被调用YAHOO.util.History.navigate("state",urlhash);
当我按下后退按钮时。
有没有办法知道onStateChange是在后退按钮上调用还是通过调用navigate?
答案 0 :(得分:1)
如果外部系统有时会调用此事件(在这种情况下是浏览器后退按钮),并且有时可能由您自己的代码调用此事件,则可以通过在自己的代码调用时执行某些特殊操作来区分调用者。方法。在您自己的帮助方法中包含对navigate()的调用有助于确保您对此保持一致。
在YUI文档中,我看到register()可以使用一个可选的第四个参数(以及其他参数),它是一个将被传递到onStateChange处理函数的任意对象。此对象的一个属性可能是一个标志,表示它是从您的代码调用而不是由浏览器启动的,并且在navigate()包装器中始终设置该标志。请记住将其设置回处理程序中。
注意:我不像ExtJS那样熟悉YUI,也许一些知道API更好的大师可以提供帮助,但这是一个可行的一般策略。这个答案做了一个不优雅的假设,即在任何其他导航有机会发生之前调用navigate()会使该处理程序可靠地触发,这在单线程javascript世界中可能是一个安全的选择。