Wrap obj.constructor test in try/catch. Thanks to bkrausz. Fixes #9897

This commit is contained in:
Rick Waldron 2011-07-25 17:06:38 -04:00
parent 27291ff06d
commit ad16db370e
2 changed files with 17 additions and 5 deletions

View File

@ -500,12 +500,17 @@ jQuery.extend({
return false;
}
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;
}
// Own properties are enumerated firstly, so to speed up,
// if last one is own, then all properties are own.

View File

@ -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);