Fixing getting/setting classes and makeArray(RegExp) for Blackberry 4.7. Fixes #6930...
authorJohn Resig <jeresig@gmail.com>
Mon, 23 Aug 2010 19:38:55 +0000 (12:38 -0700)
committerJohn Resig <jeresig@gmail.com>
Mon, 23 Aug 2010 19:38:55 +0000 (12:38 -0700)
src/attributes.js
src/core.js
test/unit/core.js

index aca9e05..1278ff8 100644 (file)
@@ -278,7 +278,8 @@ jQuery.extend({
                        }
 
                        // If applicable, access the attribute via the DOM 0 way
-                       if ( name in elem && notxml && !special ) {
+                       // 'in' checks fail in Blackberry 4.7 #6931
+                       if ( (name in elem || elem[ name ] !== undefined) && notxml && !special ) {
                                if ( set ) {
                                        // We can't allow the type property to be changed (since it causes problems in IE)
                                        if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {
index e1a3a6d..50ad55d 100644 (file)
@@ -594,7 +594,8 @@ jQuery.extend({
                        // The window, strings (and functions) also have 'length'
                        // The extra typeof function check is to prevent crashes
                        // in Safari 2 (See: #3039)
-                       if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) {
+                       // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
+                       if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || typeof array === "function" || typeof array.setInterval !== "undefined" ) {
                                push.call( ret, array );
                        } else {
                                jQuery.merge( ret, array );
index 5d6b9fe..3960a7d 100644 (file)
@@ -258,21 +258,28 @@ test("isPlainObject", function() {
        
        // Window
        ok(!jQuery.isPlainObject(window), "window");
-       var iframe = document.createElement("iframe");
-       document.body.appendChild(iframe);
 
-       window.iframeDone = function(otherObject){
-               // Objects from other windows should be matched
-               ok(jQuery.isPlainObject(new otherObject), "new otherObject");
+       try {
+               var iframe = document.createElement("iframe");
+               document.body.appendChild(iframe);
+
+               window.iframeDone = function(otherObject){
+                       // Objects from other windows should be matched
+                       ok(jQuery.isPlainObject(new otherObject), "new otherObject");
+                       document.body.removeChild( iframe );
+                       start();
+               };
+               var doc = iframe.contentDocument || iframe.contentWindow.document;
+               doc.open();
+               doc.write("<body onload='window.parent.iframeDone(Object);'>");
+               doc.close();
+       } catch(e) {
                document.body.removeChild( iframe );
+
+               ok(true, "new otherObject - iframes not supported");
                start();
-       };
-       var doc = iframe.contentDocument || iframe.contentWindow.document;
-       doc.open();
-       doc.write("<body onload='window.parent.iframeDone(Object);'>");
-       doc.close();
+       }
 });
 
 test("isFunction", function() {
@@ -374,9 +381,15 @@ test("isXMLDoc - HTML", function() {
 
        try {
                var body = jQuery(iframe).contents()[0];
-               ok( !jQuery.isXMLDoc( body ), "Iframe body element" );
-       } catch(e){
-               ok( false, "Iframe body element exception" );
+
+               try {
+                       ok( !jQuery.isXMLDoc( body ), "Iframe body element" );
+               } catch(e) {
+                       ok( false, "Iframe body element exception" );
+               }
+
+       } catch(e) {
+               ok( true, "Iframe body element - iframe not working correctly" );
        }
 
        document.body.removeChild( iframe );