YUI Library - History - Release Notes

2.6.0
  * No changes.

2.5.2
  * No changes.

2.5.1
  * While BHM still does not work with current versions of Opera, we
    are no longer throwing an exception in Opera -- which, if uncaught,
    causes execution to stop.  Instead, we're messaging the unsupported
    browser issue via YAHOO.log.  This will allow other aspects of a BHM-
    managed script to continue executing in Opera.
  * Fixed issue with case-sensitive tagName comparisons
    (SourceForge bug 1868730).

2.5.0
  * No changes.

2.4.0
  * Added onReady method (similar to the Event utility's DOMReady method)
  * Fixed SourceForge bugs 1794347, 1490803, 1490818 and 1420015.
  * Starting with YUI 2.4.0, the necessary markup (see documentation) must be
    statically created in the HTML document, and passed to the Browser History
    Manager initialize method. This has two major benefits over older versions:
      - The Browser History Manager may be initialized much later than before,
        allowing for the corresponding <script> tag to be embedded at the
        bottom of the page (which is good for performance)
      - IE had a tendency to "forget" part or all of the history when returning
        to a page.

2.3.0
  * The Browser History Manager now works on IE if used inside an IFrame
    (See SourceForge Bug #1729569)
  * Added multiNavigate method, which allows changing the state of several
    modules at once, without introducing intermediate history entries
    (See SourceForge Bug #1713236)
  * Do not raise an exception when re-registering a module
    (See SourceForge Bug #1708840)

2.2.1
  * Use YAHOO.lang.hasOwnProperty when iterating over the _modules associative
    array. This way, the browser history manager will play nice with the
    libraries that add methods to the prototype of the Array object.
  * Fixed bug related to escaping / unescaping some values.
  * Added parameters to the register method to look like the addListener method
    of the Event utility (you can now pass an object that becomes the scope of
    the onStateChange handler, or is simply passed in to that handler)
  * Upgraded code presentation to work with Crockford's latest recommendations
    (which the latest version of JSLint online implements)
  * Integrated David Bloom's findings to not have to use an external asset
    (blank.html) on IE (when not going through HTTPS)

2.2.0
  * This is the initial release of the browser history manager.
    This component is considered experimental.  Experimental components
    are released for community experimentation and feedback; they
    are not considered appropriate for implementation in mission-
    critical applications. Please see the YUI FAQ at
    http://developer.yahoo.com/yui/articles/faq/#experimental
    for more information about the "experimental" designation.