From 873fe0179e2a1230b5fc2c60fe3fc15181195e96 Mon Sep 17 00:00:00 2001 From: Ben Alman Date: Mon, 24 May 2010 11:49:56 +0000 Subject: [PATCH 1/3] 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 --- docs/files/jquery-ba-hashchange-js.html | 18 ++- 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 -> 2949 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 | 201 +++++++++++++++--------- 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 +- 23 files changed, 406 insertions(+), 119 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/docs/files/jquery-ba-hashchange-js.html b/docs/files/jquery-ba-hashchange-js.html index d49bc23..da70a75 100644 --- a/docs/files/jquery-ba-hashchange-js.html +++ b/docs/files/jquery-ba-hashchange-js.html @@ -11,25 +11,29 @@ -

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: 5/23/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: 5/23/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-4, Chrome 4-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(5/23/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.
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 100.

+ +

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 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.
@@ -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..4d14ca0 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: 5/23/2010
diff --git a/docs/index/General.html b/docs/index/General.html index 81a8978..bb45560 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: 5/23/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..1e653578221ea472a08b5ca7e9cbbf5174ca006d 100644 GIT binary patch literal 26 TcmZQ$)L>v>@c#bd8#)F6qrwl+ literal 26 XcmZQ$)L>v>@b=YEh+bMq+VBaz=YEh+bMq+VBaz<7Z>kU|?Wi0b&LQMh5wb{PJuJjE0O1DnJ&ueoB6FF$0T7h_4R-W@!c_ diff --git a/docs/nd/Data/SymbolTable.nd b/docs/nd/Data/SymbolTable.nd index d64cf9112411bc09acecf596f887ccbe74f4b8e2..315ea03d82fc5af3fc5392793ce8f74d6e8f027a 100644 GIT binary patch literal 2949 zcmb_e+iu%N5T)D334#JCkcYkw^x)cnEaieWKXLseGB0%FOsMw{xY<`e2l*t+UakPwvjxu+td=`-_r2)6%+k+RTX8mkcSh za$CTW4kZ<_s#fxD&L(h<{kRt19~76uwea@RF8l<18`m-Do6YR=~_>!H4TfTm^_RsinvX)&b2I`VeT z$=96eVnxWXO@h43sL&PDzWn1FlOd{NL!Ltrq;i`@0b|r+O{yvUxYFhw1?6TOUJTkQ zM_rMpO<%6vRWAm6RXDmO%HAv-4NeZ)S_Ix4rC1;=*|pHGQ5fwcU$;T1 zONDrW?0W$F3qcA@8Xu=8zq9k&n&qZA zPV(R_SLg@RkJ<+dI`qnHM7w*YGd7<44gBXTTd&ZeGSGf@KvECwT}2y?UfE@8SM4*s z1X;eX<_c^(jjE!m%_XO3a(3tt(=XEtur8+`-kfcY{fKswhv%`btqaZJ1$!Y}zcu_l zHK6uf1$2v4YGVMqRiH)NKmzU8kDhEnYxZml8cc$qQDZ=U5R%x0NCZJrXO|v<37x64&&3FGi!2xK&W`*cTCp}pi8io+eY~}-(Q#fhv%)aMJK1DvEdxj_ zwq+@1$yL-CH9n{m|0^tVHpKuM3Xi}hB|ps^io)&?jZCIB8!3%5Pd+--XL3Q2-^2KY zx*wu_n8K8D(6&?yZJo!UgJf&QFB3!#%B<)owNU4o(>1z}W4jz#vlU3CG8i+_mo(`9 zo7RhUFFPG2T-R13+>A^6z)$q@>5D|U@jBgu(P=?5K3z}BzqUEImbdn-rDG;-l z$tzojtP9i0cjIS6G8X6>>=|=3wdKZUkjw6XYlrA!;|1*}s)AGC^^IZta`O7ux08)+ zfjN~`Ia&%8+s1TiHDip$Ezo+Khj-e+nk0kQ+KDmB)==53VR5qyP`jl;xyh&ccfX^U gsPTU;eceqTUAp?c>|@CGdqY>wjVaLYMPh}?f0q&nv;Y7A delta 331 zcmZn_U&22@gwcGm0h|0}11^cly39PHc_A5@#R}#5McJ8o=?bY8iMa(isT0c#+4J*K z70MGUCvH@dV`LD|3M@@6s#M5GEY3*INX$!5RY)yM%`0JGWI!0VfQeH@$0o@xEVZaO zGe6Ht!BEdgN5LntxJ03}ASJORHN{H7NZ-(K@&zV26jw;0@OUOqVy;9J31hi|B$CT| z2#J@+CX2)a`f2htwtq+>d2GC*0(c$1fm3htRxV|@9;M0BtbzhuUWsLi!O2CL1tkn9 J{%qi81prSkTmJw6 diff --git a/docs/search/GeneralH.html b/docs/search/GeneralH.html index 4d3c14a..b7a2712 100644 --- a/docs/search/GeneralH.html +++ b/docs/search/GeneralH.html @@ -11,7 +11,7 @@ -
Loading...
Searching...
No Matches
document.domain="'+w+'"<\/script>');x.close();t[c].hash=y}}})();return m})()})(jQuery,this); \ No newline at end of file +(function($,i,b){var j,k=$.event.special,c="location",d="hashchange",l="href",f=$.browser,g=document.documentMode,h=f.msie&&(g===b||g<8),e="on"+d in i&&(g===b||g>7);function a(m){m=m||i[c][l];return"#"+m.replace(/^[^#]*#?(.*)$/,"$1")}$[d+"Delay"]=50;k[d]=$.extend(k[d],{setup:function(){if(e){return false}$(j.start)},teardown:function(){if(e){return false}$(j.stop)}});j=(function(){var m={},s,p=a(),n=function(t){return t},o=n,r=n;m.start=function(){s||q()};m.stop=function(){s&&clearTimeout(s);s=b};function q(){var u=a(),t=r(p);if(u!==p){o(p=u,t);$(i).trigger(d)}else{if(t!==p){i[c][l]=i[c][l].replace(/#.*/,"")+t}}s=setTimeout(q,$[d+"Delay"])}h&&(function(){var t,u;m.start=function(){if(!t){u=$[d+"IframeSrc"];u=u&&u+a();t=$("