From ad16db370e3a18819c9dea0f0e09495bafddd13c Mon Sep 17 00:00:00 2001 From: Rick Waldron Date: Mon, 25 Jul 2011 17:06:38 -0400 Subject: [PATCH] Wrap obj.constructor test in try/catch. Thanks to bkrausz. Fixes #9897 --- src/core.js | 13 +++++++++---- test/unit/core.js | 9 ++++++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/core.js b/src/core.js index 715d73ad3..f10d9edea 100644 --- a/src/core.js +++ b/src/core.js @@ -500,10 +500,15 @@ jQuery.extend({ return false; } - // Not own constructor property must be Object - if ( obj.constructor && - !hasOwn.call(obj, "constructor") && - !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 return false; } diff --git a/test/unit/core.js b/test/unit/core.js index 8c285f6dd..7599455df 100644 --- a/test/unit/core.js +++ b/test/unit/core.js @@ -290,7 +290,7 @@ test("type", function() { }); test("isPlainObject", function() { - expect(14); + expect(15); stop(); @@ -331,6 +331,13 @@ test("isPlainObject", function() { // Window ok(!jQuery.isPlainObject(window), "window"); + try { + jQuery.isPlainObject( window.location ); + ok( true, "Does not throw exceptions on host objects"); + } catch ( e ) { + ok( false, "Does not throw exceptions on host objects -- FAIL"); + } + try { var iframe = document.createElement("iframe"); document.body.appendChild(iframe);