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.

This commit is contained in:
John Resig 2009-12-06 20:00:31 -08:00
parent 7d36ccfa8e
commit 5980292856
2 changed files with 17 additions and 1 deletions

View file

@ -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;

View file

@ -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 ];
}
}