From c164cce3978fcf0ead8f52f954c7dd9c7a9e43ae Mon Sep 17 00:00:00 2001 From: Ben Alman Date: Mon, 24 May 2010 11:49:56 +0000 Subject: [PATCH] Reorganized IE6/7 Iframe code to make it more removable (for mobile dev) and added support for document.domain in IE6/7 via jQuery.hashchangeDomain and jQuery.hashchangeIframeSrc properties. Lowered default jQuery.hashchangeDelay value to 50 milliseconds. This commit fixed issue #5. --- README.markdown | 5 +- docs/files/jquery-ba-hashchange-js.html | 20 ++- docs/index/Files.html | 2 +- docs/index/General.html | 14 +- docs/index/Properties.html | 4 +- docs/nd/Data/ConfigFileInfo.nd | Bin 26 -> 26 bytes docs/nd/Data/FileInfo.nd | 4 +- docs/nd/Data/PreviousMenuState.nd | Bin 174 -> 181 bytes docs/nd/Data/PreviousSettings.nd | Bin 94 -> 108 bytes docs/nd/Data/SymbolTable.nd | Bin 1956 -> 2948 bytes docs/search/GeneralH.html | 2 +- docs/search/PropertiesH.html | 2 +- document-domain.html | 4 + examples/document_domain/index.php | 169 ++++++++++++++++++ examples/index.php | 3 + jquery.ba-hashchange.js | 216 +++++++++++++++--------- jquery.ba-hashchange.min.js | 4 +- unit/document-domain.html | 38 +++++ unit/ie7-compat.html | 12 +- unit/index.html | 10 +- unit/jquery-1.2.6.html | 10 +- unit/jquery-1.3.2.html | 10 +- unit/jquery-1.4.1.html | 10 +- unit/unit.js | 8 +- 24 files changed, 418 insertions(+), 129 deletions(-) create mode 100644 document-domain.html create mode 100644 examples/document_domain/index.php create mode 100644 unit/document-domain.html diff --git a/README.markdown b/README.markdown index 04f4d2e..148c062 100644 --- a/README.markdown +++ b/README.markdown @@ -1,7 +1,7 @@ # jQuery hashchange event # [http://benalman.com/projects/jquery-hashchange-plugin/](http://benalman.com/projects/jquery-hashchange-plugin/) -Version: 1.2, Last updated: 2/11/2010 +Version: 1.3pre, Last updated: 7/5/2010 This jQuery plugin enables very basic bookmarkable #hash history via a cross-browser window.onhashchange event. @@ -27,7 +27,7 @@ reside (so you can test it yourself). 1.2.6, 1.3.2, 1.4.1, 1.4.2 ### Browsers Tested ### -Internet Explorer 6-8, Firefox 2-3.7, Safari 3-4, Chrome, Opera 9.6-10.1. +Internet Explorer 6-8, Firefox 2-3.7, Safari 3-5, Chrome 3-5, Opera 9.6-10.5. ### Unit Tests ### [http://benalman.com/code/projects/jquery-hashchange/unit/](http://benalman.com/code/projects/jquery-hashchange/unit/) @@ -57,6 +57,7 @@ Safari: Back Button from a different domain ## Release History ## +1.3pre - (7/5/2010) Reorganized IE6/7 Iframe code to make it more removable (for mobile dev) and added support for document.domain in IE6/7 via jQuery.hashchangeDomain and jQuery.hashchangeIframeSrc properties. Note that when using jQuery.hashchangeIframeSrc, history won't be recorded in IE6/7 until the Iframe src file loads. Lowered the default jQuery.hashchangeDelay to 50 milliseconds. 1.2 - (2/11/2010) Fixed a bug where coming back to a page using this plugin from a page on another domain would cause an error in Safari 4. Also, IE6/7 Iframe is now inserted after the body (this actually works), which prevents the page from scrolling when the event is first bound. Event can also now be bound before DOM ready, but it won't be usable before then in IE6/7. 1.1 - (1/21/2010) Incorporated document.documentMode test to fix IE8 bug where browser version is incorrectly reported as 8.0, despite inclusion of the X-UA-Compatible IE=EmulateIE7 meta tag. 1.0 - (1/9/2010) Initial Release. Broke out the jQuery BBQ event.special window.onhashchange functionality into a separate plugin for users who want just the basic event & back button support, without all the extra awesomeness that BBQ provides. This plugin will be included as part of jQuery BBQ, but also be available separately. diff --git a/docs/files/jquery-ba-hashchange-js.html b/docs/files/jquery-ba-hashchange-js.html index d49bc23..d572cfa 100644 --- a/docs/files/jquery-ba-hashchange-js.html +++ b/docs/files/jquery-ba-hashchange-js.html @@ -11,28 +11,32 @@ -

jQuery hashchange event

Version: 1.2, Last updated: 2/11/2010

Project Homehttp://benalman.com/projects/jquery-hashchange-plugin/
GitHubhttp://github.com/cowboy/jquery-hashchange/
Sourcehttp://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.js
(Minified)http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js (1.1kb)
Summary
jQuery hashchange eventVersion: 1.2, Last updated: 2/11/2010
LicenseCopyright © 2010 “Cowboy” Ben Alman, Dual licensed under the MIT and GPL licenses.
ExamplesThis working example, complete with fully commented code, illustrate one way in which this plugin can be used.
Support and TestingInformation about what version or versions of jQuery this plugin has been tested with, what browsers it has been tested in, and where the unit tests reside (so you can test it yourself).
Known issuesWhile this jQuery hashchange event implementation is quite stable and robust, there are a few unfortunate browser bugs surrounding expected hashchange event-based behaviors, independent of any JavaScript window.onhashchange abstraction.
Release History
Properties
jQuery.hashchangeDelayThe numeric interval (in milliseconds) at which the hashchange event polling loop executes.
Events
hashchange eventFired when location.hash changes.
+

jQuery hashchange event

Version: 1.3pre, Last updated: 7/5/2010

Project Homehttp://benalman.com/projects/jquery-hashchange-plugin/
GitHubhttp://github.com/cowboy/jquery-hashchange/
Sourcehttp://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.js
(Minified)http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js (1.3kb)
Summary
jQuery hashchange eventVersion: 1.3pre, Last updated: 7/5/2010
LicenseCopyright © 2010 “Cowboy” Ben Alman, Dual licensed under the MIT and GPL licenses.
ExamplesThese working examples, complete with fully commented code, illustrate a few ways in which this plugin can be used.
Support and TestingInformation about what version or versions of jQuery this plugin has been tested with, what browsers it has been tested in, and where the unit tests reside (so you can test it yourself).
Known issuesWhile this jQuery hashchange event implementation is quite stable and robust, there are a few unfortunate browser bugs surrounding expected hashchange event-based behaviors, independent of any JavaScript window.onhashchange abstraction.
Release History
Properties
jQuery.hashchangeDelayThe numeric interval (in milliseconds) at which the hashchange event polling loop executes.
jQuery.hashchangeDomainIf you’re setting document.domain in your JavaScript, and you want hash history to work in IE6/7, not only must this property be set, but you must also set document.domain BEFORE jQuery is loaded into the page.
jQuery.hashchangeIframeSrcIf, for some reason, you need to specify an Iframe src file (for example, when setting document.domain as in jQuery.hashchangeDomain), you can do so using this property.
Events
hashchange eventFired when location.hash changes.

License

Copyright © 2010 “Cowboy” Ben Alman, Dual licensed under the MIT and GPL licenses.  http://benalman.com/about/license/

-

Examples

This working example, complete with fully commented code, illustrate one way in which this plugin can be used.

hashchange eventhttp://benalman.com/code/projects/jquery-hashchange/examples/hashchange/
+

Examples

These working examples, complete with fully commented code, illustrate a few ways in which this plugin can be used.

hashchange eventhttp://benalman.com/code/projects/jquery-hashchange/examples/hashchange/
document.domainhttp://benalman.com/code/projects/jquery-hashchange/examples/document_domain/
-

Support and Testing

Information about what version or versions of jQuery this plugin has been tested with, what browsers it has been tested in, and where the unit tests reside (so you can test it yourself).

jQuery Versions1.2.6, 1.3.2, 1.4.1, 1.4.2
Browsers TestedInternet Explorer 6-8, Firefox 2-3.7, Safari 3-4, Chrome, Opera 9.6-10.1.
Unit Testshttp://benalman.com/code/projects/jquery-hashchange/unit/
+

Support and Testing

Information about what version or versions of jQuery this plugin has been tested with, what browsers it has been tested in, and where the unit tests reside (so you can test it yourself).

jQuery Versions1.2.6, 1.3.2, 1.4.1, 1.4.2
Browsers TestedInternet Explorer 6-8, Firefox 2-3.7, Safari 3-5, Chrome 3-5, Opera 9.6-10.5.
Unit Testshttp://benalman.com/code/projects/jquery-hashchange/unit/

Known issues

While this jQuery hashchange event implementation is quite stable and robust, there are a few unfortunate browser bugs surrounding expected hashchange event-based behaviors, independent of any JavaScript window.onhashchange abstraction.  See the following examples for more information:

Chrome: Back Buttonhttp://benalman.com/code/projects/jquery-hashchange/examples/bug-chrome-back-button/
Firefox: Remote XMLHttpRequesthttp://benalman.com/code/projects/jquery-hashchange/examples/bug-firefox-remote-xhr/
WebKit: Back Button in an Iframehttp://benalman.com/code/projects/jquery-hashchange/examples/bug-webkit-hash-iframe/
Safari: Back Button from a different domainhttp://benalman.com/code/projects/jquery-hashchange/examples/bug-safari-back-from-diff-domain/
-

Release History

1.2(2/11/2010) Fixed a bug where coming back to a page using this plugin from a page on another domain would cause an error in Safari 4.  Also, IE6/7 Iframe is now inserted after the body (this actually works), which prevents the page from scrolling when the event is first bound.  Event can also now be bound before DOM ready, but it won’t be usable before then in IE6/7.
1.1(1/21/2010) Incorporated document.documentMode test to fix IE8 bug where browser version is incorrectly reported as 8.0, despite inclusion of the X-UA-Compatible IE=EmulateIE7 meta tag.
1.0(1/9/2010) Initial Release.  Broke out the jQuery BBQ event.special window.onhashchange functionality into a separate plugin for users who want just the basic event & back button support, without all the extra awesomeness that BBQ provides.  This plugin will be included as part of jQuery BBQ, but also be available separately.
+

Release History

1.3pre(7/5/2010) Reorganized IE6/7 Iframe code to make it more “removable” for mobile development.  Added jQuery.hashchangeDomain, jQuery.hashchangeIframeSrc properties and document-domain.html file to address access denied issues when setting document.domain in IE6/7.  Note that when using jQuery.hashchangeIframeSrc, history won’t be recorded in IE6/7 until the Iframe src file loads.  Lowered the default jQuery.hashchangeDelay to 50 milliseconds.
1.2(2/11/2010) Fixed a bug where coming back to a page using this plugin from a page on another domain would cause an error in Safari 4.  Also, IE6/7 Iframe is now inserted after the body (this actually works), which prevents the page from scrolling when the event is first bound.  Event can also now be bound before DOM ready, but it won’t be usable before then in IE6/7.
1.1(1/21/2010) Incorporated document.documentMode test to fix IE8 bug where browser version is incorrectly reported as 8.0, despite inclusion of the X-UA-Compatible IE=EmulateIE7 meta tag.
1.0(1/9/2010) Initial Release.  Broke out the jQuery BBQ event.special window.onhashchange functionality into a separate plugin for users who want just the basic event & back button support, without all the extra awesomeness that BBQ provides.  This plugin will be included as part of jQuery BBQ, but also be available separately.

Properties

-

jQuery.hashchangeDelay

The numeric interval (in milliseconds) at which the hashchange event polling loop executes.  Defaults to 100.

+

jQuery.hashchangeDelay

The numeric interval (in milliseconds) at which the hashchange event polling loop executes.  Defaults to 50.

+ +

jQuery.hashchangeDomain

If you’re setting document.domain in your JavaScript, and you want hash history to work in IE6/7, not only must this property be set, but you must also set document.domain BEFORE jQuery is loaded into the page.

In addition, the jQuery.hashchangeIframeSrc property must be set to the path of the included “document-domain.html” file, which can be renamed or modified if necessary (note that the document.domain specified must be the same in both your main JavaScript as well as in this file).

Usage

$.hashchangeDomain = document.domain;

+ +

jQuery.hashchangeIframeSrc

If, for some reason, you need to specify an Iframe src file (for example, when setting document.domain as in jQuery.hashchangeDomain), you can do so using this property.

Usage

$.hashchangeIframeSrc = ‘path/to/file.html’;

Events

-

hashchange event

Fired when location.hash changes.  In browsers that support it, the native window.onhashchange event is used (IE8, FF3.6), otherwise a polling loop is initialized, running every jQuery.hashchangeDelay milliseconds to see if the hash has changed.  In IE 6 and 7, a hidden Iframe is created to allow the back button and hash-based history to work.

Usage

$(window).bind( 'hashchange', function(e) {
+

hashchange event

Fired when location.hash changes.  In browsers that support it, the native HTML5 window.onhashchange event is used (IE8, FF3.6), otherwise a polling loop is initialized, running every jQuery.hashchangeDelay milliseconds to see if the hash has changed.  In IE 6 and 7, a hidden Iframe is created to allow the back button and hash-based history to work.

Usage

$(window).bind( 'hashchange', function(e) {
   var hash = location.hash;
   ...
-});

Additional Notes

  • The polling loop and Iframe are not created until at least one callback is actually bound to ‘hashchange’.
  • If you need the bound callback(s) to execute immediately, in cases where the page ‘state’ exists on page load (via bookmark or page refresh, for example) use $(window).trigger( ‘hashchange’ );
  • The event can be bound before DOM ready, but since it won’t be usable before then in IE6/7 (due to the necessary Iframe), recommended usage is to bind it inside a $(document).ready() callback.
+});

Additional Notes

  • The polling loop and Iframe are not created until at least one callback is actually bound to ‘hashchange’.
  • If you need the bound callback(s) to execute immediately, in cases where the page ‘state’ exists on page load (via bookmark or page refresh, for example) use $(window).trigger( ‘hashchange’ );
  • The event can be bound before DOM ready, but since it won’t be usable before then in IE6/7 (due to the necessary Iframe), recommended usage is to bind it inside a DOM ready callback.
@@ -47,7 +51,7 @@ -
Fired when location.hash changes.
The numeric interval (in milliseconds) at which the hashchange event polling loop executes.
+
Fired when location.hash changes.
If you’re setting document.domain in your JavaScript, and you want hash history to work in IE6/7, not only must this property be set, but you must also set document.domain BEFORE jQuery is loaded into the page.
If, for some reason, you need to specify an Iframe src file (for example, when setting document.domain as in jQuery.hashchangeDomain), you can do so using this property.
The numeric interval (in milliseconds) at which the hashchange event polling loop executes.
diff --git a/docs/index/Files.html b/docs/index/Files.html index d182037..bbe6171 100644 --- a/docs/index/Files.html +++ b/docs/index/Files.html @@ -13,7 +13,7 @@
File Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
J
 jQuery hashchange event
-
Version: 1.2, Last updated: 2/11/2010
+
Version: 1.3pre, Last updated: 7/5/2010
diff --git a/docs/index/General.html b/docs/index/General.html index 81a8978..ea707bd 100644 --- a/docs/index/General.html +++ b/docs/index/General.html @@ -11,25 +11,25 @@ -
Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
E
 Events
 Examples
H
 hashchange event
 hashchangeDelay, jQuery
J
 jQuery hashchange event
K
 Known issues
L
 License
P
 Properties
R
 Release History
S
 Support and Testing
+
Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
E
 Events
 Examples
H
 hashchange event
 hashchangeDelay, jQuery
 hashchangeDomain, jQuery
 hashchangeIframeSrc, jQuery
J
 jQuery hashchange event
K
 Known issues
L
 License
P
 Properties
R
 Release History
S
 Support and Testing
-
This working example, complete with fully commented code, illustrate one way in which this plugin can be used.
+
These working examples, complete with fully commented code, illustrate a few ways in which this plugin can be used.
-
Fired when location.hash changes.
The numeric interval (in milliseconds) at which the hashchange event polling loop executes.
+
Fired when location.hash changes.
The numeric interval (in milliseconds) at which the hashchange event polling loop executes.
If you’re setting document.domain in your JavaScript, and you want hash history to work in IE6/7, not only must this property be set, but you must also set document.domain BEFORE jQuery is loaded into the page.
If, for some reason, you need to specify an Iframe src file (for example, when setting document.domain as in jQuery.hashchangeDomain), you can do so using this property.
-
Version: 1.2, Last updated: 2/11/2010
+
Version: 1.3pre, Last updated: 7/5/2010
-
While this jQuery hashchange event implementation is quite stable and robust, there are a few unfortunate browser bugs surrounding expected hashchange event-based behaviors, independent of any JavaScript window.onhashchange abstraction.
+
While this jQuery hashchange event implementation is quite stable and robust, there are a few unfortunate browser bugs surrounding expected hashchange event-based behaviors, independent of any JavaScript window.onhashchange abstraction.
-
Copyright © 2010 “Cowboy” Ben Alman, Dual licensed under the MIT and GPL licenses.
+
Copyright © 2010 “Cowboy” Ben Alman, Dual licensed under the MIT and GPL licenses.
@@ -41,7 +41,7 @@ -
Information about what version or versions of jQuery this plugin has been tested with, what browsers it has been tested in, and where the unit tests reside (so you can test it yourself).
+
Information about what version or versions of jQuery this plugin has been tested with, what browsers it has been tested in, and where the unit tests reside (so you can test it yourself).
diff --git a/docs/index/Properties.html b/docs/index/Properties.html index 6ebfeea..f10f351 100644 --- a/docs/index/Properties.html +++ b/docs/index/Properties.html @@ -11,9 +11,9 @@ -
Property Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
H
 hashchangeDelay, jQuery
+
Property Index
$#! · 0-9 · A · B · C · D · E · F · G · H · I · J · K · L · M · N · O · P · Q · R · S · T · U · V · W · X · Y · Z
H
 hashchangeDelay, jQuery
 hashchangeDomain, jQuery
 hashchangeIframeSrc, jQuery
-
The numeric interval (in milliseconds) at which the hashchange event polling loop executes.
+
The numeric interval (in milliseconds) at which the hashchange event polling loop executes.
If you’re setting document.domain in your JavaScript, and you want hash history to work in IE6/7, not only must this property be set, but you must also set document.domain BEFORE jQuery is loaded into the page.
If, for some reason, you need to specify an Iframe src file (for example, when setting document.domain as in jQuery.hashchangeDomain), you can do so using this property.
diff --git a/docs/nd/Data/ConfigFileInfo.nd b/docs/nd/Data/ConfigFileInfo.nd index c4b4764b7b98875364c1045e59c65cd6caa142a6..ab9c67b024e9eca9c77c173a3eec0f2fc1f41fdc 100644 GIT binary patch literal 26 XcmZQ$)L>v>@c#bdn~&l91;`ixe~Jr$ literal 26 XcmZQ$)L>v>@b=YEh+bMq+VBaz=YEh+bMq+VBazkU|?Wi0b&LQMh5wb{PJuJjE0O1DnJ&ueoB6FF$0T7h_4R-W@!c_ diff --git a/docs/nd/Data/SymbolTable.nd b/docs/nd/Data/SymbolTable.nd index d64cf9112411bc09acecf596f887ccbe74f4b8e2..6da0205890a83502a7d1bd817d2e7c38b48dba99 100644 GIT binary patch literal 2948 zcmb_e!EW0|5T)A234#JCkVCHn9b6lbsiZ|4Aa)ESvC^t_(KI&NW3eQM;yTnWy}Oj6 zKgu`cGx{I>hrS`@l8)Y!c-l=6(vd8oB)VtNRa`uAL z;HMXtHM`A0p?r}R$}IRGvrDDTb|X$yZ!f;^(cJ|bb~?qu{=8t%w6^Z8HVfkIB@;@m z+!nBjhR)Whh~) zJ!kPJ(ay!M5_0sgi+P?qwd6CG4uJ0-sHxb64T$@6o=+&Zj=WtmIac1932kgmh5;m4 z@)f5#-w+~fgCOrx%5}-KCx6^>G65%*4w>bcQ<%XX^@X1_hu0WbE3I_P!pv>-_b5A?3A6`z@7;wDcdTu&tKR zN-k@SPUC}0@L$QbvkCgoM7TlDm3*2uREq{fZKN@6HA6|g@Z@U;d?pif@H^Cf5!lBj zI!I8IGKi~CD{Y-epF;*J#+L~qT4gr$qgtu6)aeTP#X+F+=ed~m zD`fe$9*mMJcJ3votqJ1!wLJ?n8!K08!Evug-DK~6Coys3 i|D5@{JpJp;HSA@hs0U{|XbgKp2j@m}ANC?Ch0)(djR=JR delta 301 zcmZn>U&22@gwcGmBe(qIjch8Sc_A5@#R}#5McJ8o=?bY8iMa(isT0c#+4J*K70MGU zCvH??W@Heb{E$tYg@KU)rcqLdB`q^2m4Sgl$0o@xEVZaOGe6Ht!BEdgN5LntxJ03} zASJORHN{H7NZ-(K@_8mXgq{3AbJ%?{lT-7GQ<02RnS6*fX|gYiI6~#*^(?z5TQbYS zMIEWUP&>Me#yysY%&m)n>Vs4F(PToW8;}D&w=o^
Loading...
Searching...
No Matches