Commit 76db8a98 authored by jeresig's avatar jeresig

Allow data to be bound to Flash objects (but still stopping short of attaching...

Allow data to be bound to Flash objects (but still stopping short of attaching to applets. Fixes #6121.
parent f10057bc
......@@ -17,12 +17,13 @@ jQuery.extend({
// attempt to add expando properties to them.
noData: {
"embed": true,
"object": true,
// Ban all objects except for Flash (which handle expandos)
"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
"applet": true
},
data: function( elem, name, data ) {
if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
if ( !jQuery.acceptData( elem ) ) {
return;
}
......@@ -85,7 +86,7 @@ jQuery.extend({
},
removeData: function( elem, name ) {
if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
if ( !jQuery.acceptData( elem ) ) {
return;
}
......@@ -126,6 +127,19 @@ jQuery.extend({
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" );
});
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() {
expect(13);
var div = document.createElement("div");
......
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