| <html> |
| <head> |
| <script> |
| |
| if (!window.sessionStorage) { |
| alert("This test needs sessionstorage to run properly"); |
| location.href = "http://webkit.org/"; |
| } |
| |
| var targetNumberOfEventsForFirstTest = 8; |
| var targetNumberOfEventsForSecondTest = 10; |
| |
| var testNumber = 1; |
| if (sessionStorage.totalEventsFired == targetNumberOfEventsForFirstTest) |
| testNumber = 2; |
| |
| sessionStorage.clear(); |
| sessionStorage.totalEventsFired = 0; |
| |
| if (window.testRunner) { |
| testRunner.dumpAsText(); |
| testRunner.waitUntilDone(); |
| } |
| |
| function startTest() |
| { |
| if (testNumber == 1) { |
| location.hash='#'; |
| location.hash='#'; |
| location.hash='#someHash'; |
| location.hash='#'; |
| location.hash='#'; |
| location.hash='#someHash'; |
| location.hash='#someHash'; |
| location.hash='#'; |
| } else if (testNumber == 2) { |
| location.hash='#someHash'; |
| location.hash='#someHash'; |
| location.hash='#'; |
| location.hash='#someHash'; |
| location.hash='#someHash'; |
| location.hash='#'; |
| location.hash='#'; |
| location.hash='#someHash'; |
| } else |
| alert("This shouldn't happen."); |
| } |
| |
| var totalEventsFired = 0; |
| function hashChanged(eventHandlerName) |
| { |
| alert("Test number " + testNumber + ".\nhashchange event received by " + eventHandlerName + ".\nA total of " + ++sessionStorage.totalEventsFired + " events have been received."); |
| if (testNumber == 1 && sessionStorage.totalEventsFired == targetNumberOfEventsForFirstTest) { |
| location.hash=""; |
| location.href=location.href.substr(0, location.href.length - 1); |
| } |
| if (testNumber == 2 && sessionStorage.totalEventsFired == targetNumberOfEventsForSecondTest && window.testRunner) { |
| testRunner.notifyDone(); |
| sessionStorage.clear(); |
| } |
| } |
| |
| window.addEventListener("hashchange", function() { hashChanged('window-event-listener'); }, false); |
| |
| </script> |
| </head> |
| <body onload="setTimeout('startTest();', 0);" onhashchange="hashChanged('body-onhashchange-attribute');"> |
| This test checks to make sure the hashchange event is fired when the value of location.hash changes.<br> |
| This includes testing the transition from no fragment identifier to an empty fragment identifier *not* generating an event, as these cases are equivalent as far as location.hash is concerned.<br> |
| Clicking the links below manually should also result in the event being fired when the hash actually changes.<br> |
| <a href="#">Go to empty hash</a><br> |
| <a href="#someHash">Go to non-empty hash</a><br> |
| <a name="#">Empty hash anchor</a><br> |
| <a name="#someHash">Non-empty hash anchor</a> |
| </body> |
| </html> |