Allow data to be bound to Flash objects (but still stopping short of attaching to applets. Fixes #6121.
This commit is contained in:
parent
f10057bc48
commit
76db8a9822
2 changed files with 35 additions and 3 deletions
20
src/data.js
20
src/data.js
|
@ -17,12 +17,13 @@ jQuery.extend({
|
||||||
// attempt to add expando properties to them.
|
// attempt to add expando properties to them.
|
||||||
noData: {
|
noData: {
|
||||||
"embed": true,
|
"embed": true,
|
||||||
"object": true,
|
// Ban all objects except for Flash (which handle expandos)
|
||||||
|
"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
|
||||||
"applet": true
|
"applet": true
|
||||||
},
|
},
|
||||||
|
|
||||||
data: function( elem, name, data ) {
|
data: function( elem, name, data ) {
|
||||||
if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
|
if ( !jQuery.acceptData( elem ) ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,7 +86,7 @@ jQuery.extend({
|
||||||
},
|
},
|
||||||
|
|
||||||
removeData: function( elem, name ) {
|
removeData: function( elem, name ) {
|
||||||
if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
|
if ( !jQuery.acceptData( elem ) ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,6 +127,19 @@ jQuery.extend({
|
||||||
delete cache[ id ];
|
delete cache[ id ];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// A method for determining if a DOM node can handle the data expando
|
||||||
|
acceptData: function( elem ) {
|
||||||
|
if ( elem.nodeName ) {
|
||||||
|
match = jQuery.noData[ elem.nodeName.toLowerCase() ];
|
||||||
|
|
||||||
|
if ( match ) {
|
||||||
|
return !(match === true || elem.getAttribute("classid") !== match);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,24 @@ test("expando", function(){
|
||||||
equals( id.foo, "bar", "jQuery.data worked correctly" );
|
equals( id.foo, "bar", "jQuery.data worked correctly" );
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("jQuery.acceptData", function() {
|
||||||
|
expect(7);
|
||||||
|
|
||||||
|
ok( jQuery.acceptData( document ), "document" );
|
||||||
|
ok( jQuery.acceptData( document.documentElement ), "documentElement" );
|
||||||
|
ok( jQuery.acceptData( {} ), "object" );
|
||||||
|
ok( !jQuery.acceptData( document.createElement("embed") ), "embed" );
|
||||||
|
ok( !jQuery.acceptData( document.createElement("applet") ), "applet" );
|
||||||
|
|
||||||
|
var flash = document.createElement("object");
|
||||||
|
flash.setAttribute("classid", "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000");
|
||||||
|
ok( jQuery.acceptData( flash ), "flash" );
|
||||||
|
|
||||||
|
var applet = document.createElement("object");
|
||||||
|
applet.setAttribute("classid", "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93");
|
||||||
|
ok( !jQuery.acceptData( applet ), "applet" );
|
||||||
|
});
|
||||||
|
|
||||||
test("jQuery.data", function() {
|
test("jQuery.data", function() {
|
||||||
expect(13);
|
expect(13);
|
||||||
var div = document.createElement("div");
|
var div = document.createElement("div");
|
||||||
|
|
Loading…
Add table
Reference in a new issue