Traversing: Fix contents() on <object>s with children in IE

The original fix didn't account for the fact that in IE `<object>` elements
with no `data` attribute have an object `contentDocument`. The fix leverages
the fact that this special object has a null prototype.

Closes gh-4390
Ref gh-4384
Ref gh-4385
This commit is contained in:
Michał Gołębiowski-Owczarek 2019-05-08 10:12:36 +02:00 committed by GitHub
parent 4d865d96aa
commit ccbd6b9342
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,5 +1,6 @@
define( [
"./core",
"./var/getProto",
"./var/indexOf",
"./traversing/var/dir",
"./traversing/var/siblings",
@ -9,7 +10,7 @@ define( [
"./core/init",
"./traversing/findFilter",
"./selector"
], function( jQuery, indexOf, dir, siblings, rneedsContext, nodeName ) {
], function( jQuery, getProto, indexOf, dir, siblings, rneedsContext, nodeName ) {
"use strict";
@ -145,7 +146,13 @@ jQuery.each( {
return siblings( elem.firstChild );
},
contents: function( elem ) {
if ( elem.contentDocument != null ) {
if ( elem.contentDocument != null &&
// Support: IE 11+
// <object> elements with no `data` attribute has an object
// `contentDocument` with a `null` prototype.
getProto( elem.contentDocument ) ) {
return elem.contentDocument;
}