]> source.dussan.org Git - jquery.git/commitdiff
Traversing: Fix `contents()` on `<object>`s with children in IE
authorMichał Gołębiowski-Owczarek <m.goleb@gmail.com>
Wed, 8 May 2019 08:12:36 +0000 (10:12 +0200)
committerMichał Gołębiowski-Owczarek <m.goleb@gmail.com>
Wed, 8 May 2019 09:08:14 +0000 (11:08 +0200)
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.

(cherry-picked from ccbd6b93424cbdbf86f07a86c2e55cbab497d7a3)

Closes gh-4390
Ref gh-4384
Ref gh-4385

src/traversing.js

index 25843ee8c744230f47744494c6cb1ab3dfa07b5e..afbecc4f4dd8204643ebcfe160cb127d5ea89320 100644 (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;
                }