diff options
author | John Resig <jeresig@gmail.com> | 2009-12-06 20:00:31 -0800 |
---|---|---|
committer | John Resig <jeresig@gmail.com> | 2009-12-06 20:00:31 -0800 |
commit | 59802928566b6be3a66d65e77c2418fff37e6f5f (patch) | |
tree | f8969622b3c9e7ac61afdf54e37f5610fd188192 | |
parent | 7d36ccfa8eb018fcf349e1f74e3a0a614385558f (diff) | |
download | jquery-59802928566b6be3a66d65e77c2418fff37e6f5f.tar.gz jquery-59802928566b6be3a66d65e77c2418fff37e6f5f.zip |
Make sure that expando properties aren't set on embed, applet, or object elements. An uncatchable exception is thrown and we must avoid it. Fixes #1675 and #2349.
-rw-r--r-- | src/data.js | 16 | ||||
-rw-r--r-- | src/manipulation.js | 2 |
2 files changed, 17 insertions, 1 deletions
diff --git a/src/data.js b/src/data.js index 1d993fe58..44d77a902 100644 --- a/src/data.js +++ b/src/data.js @@ -6,7 +6,19 @@ jQuery.extend({ expando:expando, + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + "object": true, + "applet": true + }, + data: function( elem, name, data ) { + if ( jQuery.noData[elem.nodeNode.toLowerCase()] ) { + return; + } + elem = elem == window ? windowData : elem; @@ -43,6 +55,10 @@ jQuery.extend({ }, removeData: function( elem, name ) { + if ( jQuery.noData[elem.nodeNode.toLowerCase()] ) { + return; + } + elem = elem == window ? windowData : elem; diff --git a/src/manipulation.js b/src/manipulation.js index a8cb484bb..e1657a8cf 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -463,7 +463,7 @@ jQuery.extend({ function cleanData( elems ) { for ( var i = 0, elem, id; (elem = elems[i]) != null; i++ ) { - if ( (id = elem[expando]) ) { + if ( !jQuery.noData[elem.nodeNode.toLowerCase()] && (id = elem[expando]) ) { delete jQuery.cache[ id ]; } } |