Commit 59802928 authored by John Resig's avatar John Resig

Make sure that expando properties aren't set on embed, applet, or object...

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.
parent 7d36ccfa
...@@ -6,7 +6,19 @@ jQuery.extend({ ...@@ -6,7 +6,19 @@ jQuery.extend({
expando:expando, 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 ) { data: function( elem, name, data ) {
if ( jQuery.noData[elem.nodeNode.toLowerCase()] ) {
return;
}
elem = elem == window ? elem = elem == window ?
windowData : windowData :
elem; elem;
...@@ -43,6 +55,10 @@ jQuery.extend({ ...@@ -43,6 +55,10 @@ jQuery.extend({
}, },
removeData: function( elem, name ) { removeData: function( elem, name ) {
if ( jQuery.noData[elem.nodeNode.toLowerCase()] ) {
return;
}
elem = elem == window ? elem = elem == window ?
windowData : windowData :
elem; elem;
......
...@@ -463,7 +463,7 @@ jQuery.extend({ ...@@ -463,7 +463,7 @@ jQuery.extend({
function cleanData( elems ) { function cleanData( elems ) {
for ( var i = 0, elem, id; (elem = elems[i]) != null; i++ ) { 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 ]; delete jQuery.cache[ id ];
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment