Data: Work around IE11 bug with onpageshow attribute

Fixes #14894
This commit is contained in:
Dave Methvin 2014-04-30 10:43:39 -04:00
parent c34dbf5a8d
commit b8133e282c
3 changed files with 30 additions and 4 deletions

View File

@ -87,13 +87,17 @@ jQuery.fn.extend({
if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) { if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) {
i = attrs.length; i = attrs.length;
while ( i-- ) { while ( i-- ) {
name = attrs[ i ].name;
// Support: IE11+
// The attrs elements can be null (#14894)
if ( attrs[ i ] ) {
name = attrs[ i ].name;
if ( name.indexOf( "data-" ) === 0 ) { if ( name.indexOf( "data-" ) === 0 ) {
name = jQuery.camelCase( name.slice(5) ); name = jQuery.camelCase( name.slice(5) );
dataAttr( elem, name, data[ name ] ); dataAttr( elem, name, data[ name ] );
} }
} }
}
data_priv.set( elem, "hasDataAttrs", true ); data_priv.set( elem, "hasDataAttrs", true );
} }
} }

View File

@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>IE11 onpageshow strangeness (#14894)</title>
<script src="../../jquery.js"></script>
<script>
$(function(){
window.parent.iframeCallback( $( "body" ).data().result );
});
</script>
</head>
<body x-what="test" data-result="ok" onload="x=1" onpageshow="x=1">
Test for #14894
</body>
</html>

View File

@ -801,3 +801,9 @@ test("Check proper data removal of non-element descendants nodes (#8335)", 1, fu
ok( !text.data("test"), "Be sure data is not stored in non-element" ); ok( !text.data("test"), "Be sure data is not stored in non-element" );
}); });
testIframeWithCallback( "enumerate data attrs on body (#14894)", "data/dataAttrs.html", function( result ) {
expect(1);
equal(result, "ok", "enumeration of data- attrs on body" );
});