]> source.dussan.org Git - jquery.git/commitdiff
Revert "Fix #14180. Allow cross-frame use of focusin/out. Close gh-1369."
authorDave Methvin <dave.methvin@gmail.com>
Wed, 23 Oct 2013 02:47:34 +0000 (22:47 -0400)
committerDave Methvin <dave.methvin@gmail.com>
Wed, 23 Oct 2013 02:47:34 +0000 (22:47 -0400)
This reverts commit bba8366af48bd2c80c96e7a0f58b3e16fd736125.

Because cross-frame focus sucks.

src/event.js
test/data/event/focusinCrossFrame.html [deleted file]
test/unit/event.js

index cc0fe17004b842069fb8a389b195f6881cc51bcc..a6f69f49ff505972c8963941be692302230a7771 100644 (file)
@@ -892,29 +892,22 @@ if ( !support.changeBubbles ) {
 if ( !support.focusinBubbles ) {
        jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
 
-               // Attach a single capturing handler on the document while someone wants focusin/focusout
-               var handler = function( event ) {
+               // Attach a single capturing handler while someone wants focusin/focusout
+               var attaches = 0,
+                       handler = function( event ) {
                                jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
                        };
 
                jQuery.event.special[ fix ] = {
                        setup: function() {
-                               var doc = this.ownerDocument,
-                                       attaches = jQuery._data( doc, "focusCount" );
-
-                               if ( !attaches ) {
-                                       doc.addEventListener( orig, handler, true );
+                               if ( attaches++ === 0 ) {
+                                       document.addEventListener( orig, handler, true );
                                }
-                               jQuery._data( doc, "focusCount", ( attaches || 0 ) + 1 );
                        },
                        teardown: function() {
-                               var doc = this.ownerDocument,
-                                       attaches = jQuery._data( doc, "focusCount" ) - 1;
-
-                               if ( !attaches ) {
-                                       doc.removeEventListener( orig, handler, true );
+                               if ( --attaches === 0 ) {
+                                       document.removeEventListener( orig, handler, true );
                                }
-                               jQuery._data( doc, "focusCount", attaches );
                        }
                };
        });
diff --git a/test/data/event/focusinCrossFrame.html b/test/data/event/focusinCrossFrame.html
deleted file mode 100644 (file)
index 487f8de..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<!doctype html>
-<html>
-<head>
-       <meta http-equiv="Content-type" content="text/html; charset=utf-8">
-       <title>focusin event cross-frame (#14180)</title>
-
-       <script src="../../jquery.js"></script>
-</head>
-<body>
-       <input type="text" id="frame-input" />
-       <script>
-               // Call parent when this frame is fully loaded, it will mess with #frame-input
-               jQuery( window ).one( "load", function() {
-                       window.parent.iframeCallback( document );
-               });
-       </script>
-</body>
-</html>
index 1310e050a2c7a6e17c6b2a43c1f81894147a49ca..d81551da94edb84e4128a546361f5377bb474d63 100644 (file)
@@ -2507,33 +2507,6 @@ test("fixHooks extensions", function() {
        jQuery.event.fixHooks.click = saved;
 });
 
-testIframeWithCallback( "focusin from an iframe", "event/focusinCrossFrame.html", function( frameDoc ) {
-       expect(1);
-
-       var input = jQuery( frameDoc ).find( "#frame-input" );
-
-       // Create a focusin handler on the parent; shouldn't affect the iframe's fate
-       jQuery ( "body" ).on( "focusin.iframeTest", function() {
-               ok( false, "fired a focusin event in the parent document" );
-       });
-
-       input.on( "focusin", function() {
-               ok( true, "fired a focusin event in the iframe" );
-       });
-
-       // Avoid a native event; Chrome can't force focus to another frame
-       input.trigger( "focusin" );
-
-       // Must manually remove handler to avoid leaks in our data store
-       input.remove();
-
-       // Be sure it was removed; nothing should happen
-       input.trigger( "focusin" );
-
-       // Remove body handler manually since it's outside the fixture
-       jQuery( "body" ).off( "focusin.iframeTest" );
-});
-
 testIframeWithCallback( "jQuery.ready promise", "event/promiseReady.html", function( isOk ) {
        expect(1);
        ok( isOk, "$.when( $.ready ) works" );