Make WordPress Core

Changeset 56809


Ignore:
Timestamp:
10/09/2023 09:29:42 PM (3 years ago)
Author:
westonruter
Message:

Administration: Remove deprecated unload event handlers and use pagehide (and pageshow) when appropriate.

Use pagehide event instead of unload in the following cases:

  • For classic editor to release the post lock.
  • In Text widget to rebuild editor after dragging widget to new location in classic widgets interface.
  • To clear out the window.name when navigating away from a post preview.
  • To suspend heartbeat, while also using pageshow event to resume as if it had been a focused tab in case page restored from bfcache.

Also:

  • Remove obsolete mobile cleanup code in js/_enqueues/lib/gallery.js (introduced in [9894]). Do same for src/js/_enqueues/wp/media/models.js (introduced in [22872]). See #22552.
  • Remove obsolete Firefox-specific workaround in js/_enqueues/wp/mce-view.js from [39282]. See #38511.

Fixes #55491.
Props spenserhale, westonruter, adamsilverstein, azaozz, shawfactor, peterwilsoncc, swissspidy.

Location:
trunk/src
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/js/_enqueues/admin/post.js

    r55561 r56809  
    512512                        return __( 'The changes you made will be lost if you navigate away from this page.' );
    513513                }
    514         }).on( 'unload.edit-post', function( event ) {
     514        }).on( 'pagehide.edit-post', function( event ) {
    515515                if ( ! releaseLock ) {
    516516                        return;
  • trunk/src/js/_enqueues/lib/gallery.js

    r50547 r56809  
    8989});
    9090
    91 jQuery(window).on( 'unload', function () { window.tinymce = window.tinyMCE = window.wpgallery = null; } ); // Cleanup.
    92 
    9391/* gallery settings */
    9492window.tinymce = null;
  • trunk/src/js/_enqueues/wp/heartbeat.js

    r53226 r56809  
    224224                        }
    225225
    226                         $(window).on( 'unload.wp-heartbeat', function() {
     226                        $(window).on( 'pagehide.wp-heartbeat', function() {
    227227                                // Don't connect anymore.
    228                                 settings.suspend = true;
     228                                suspend();
    229229
    230230                                // Abort the last request if not completed.
     
    233233                                }
    234234                        });
     235
     236                        $(window).on(
     237                                'pageshow.wp-heartbeat',
     238                                /**
     239                                 * Handles pageshow event, specifically when page navigation is restored from back/forward cache.
     240                                 *
     241                                 * @param {jQuery.Event} event
     242                                 * @param {PageTransitionEvent} event.originalEvent
     243                                 */
     244                                function ( event ) {
     245                                        if ( event.originalEvent.persisted ) {
     246                                                /*
     247                                                 * When page navigation is stored via bfcache (Back/Forward Cache), consider this the same as
     248                                                 * if the user had just switched to the tab since the behavior is similar.
     249                                                 */
     250                                                focused();
     251                                        }
     252                                }
     253                        );
    235254
    236255                        // Check for user activity every 30 seconds.
     
    542561
    543562                        // Resume if suspended.
    544                         settings.suspend = false;
     563                        resume();
    545564
    546565                        if ( ! settings.hasFocus ) {
     
    551570
    552571                /**
     572                 * Suspends connecting.
     573                 */
     574                function suspend() {
     575                        settings.suspend = true;
     576                }
     577
     578                /**
     579                 * Resumes connecting.
     580                 */
     581                function resume() {
     582                        settings.suspend = false;
     583                }
     584
     585                /**
    553586                 * Runs when the user becomes active after a period of inactivity.
    554587                 *
     
    594627                        // Always suspend after 60 minutes of inactivity. This will release the post lock, etc.
    595628                        if ( ( settings.suspendEnabled && lastActive > 600000 ) || lastActive > 3600000 ) {
    596                                 settings.suspend = true;
     629                                suspend();
    597630                        }
    598631
  • trunk/src/js/_enqueues/wp/mce-view.js

    r48650 r56809  
    644644                                }
    645645
    646                                 function reload() {
    647                                         if ( ! editor.isHidden() ) {
    648                                                 $( node ).data( 'rendered', null );
    649 
    650                                                 setTimeout( function() {
    651                                                         wp.mce.views.render();
    652                                                 } );
    653                                         }
    654                                 }
    655 
    656646                                function addObserver() {
    657647                                        observer = new MutationObserver( _.debounce( resize, 100 ) );
     
    664654                                }
    665655
    666                                 $( iframeWin ).on( 'load', resize ).on( 'unload', reload );
     656                                $( iframeWin ).on( 'load', resize );
    667657
    668658                                MutationObserver = iframeWin.MutationObserver || iframeWin.WebKitMutationObserver || iframeWin.MozMutationObserver;
  • trunk/src/js/_enqueues/wp/media/models.js

    r48650 r56809  
    33 */
    44
    5 var $ = jQuery,
    6         Attachment, Attachments, l10n, media;
     5var Attachment, Attachments, l10n, media;
    76
    87/** @namespace wp */
     
    238237        });
    239238};
    240 
    241 // Clean up. Prevents mobile browsers caching.
    242 $(window).on('unload', function(){
    243         window.wp = null;
    244 });
  • trunk/src/js/_enqueues/wp/widgets/text.js

    r51409 r56809  
    292292
    293293                                        // When a widget is moved in the DOM the dynamically-created TinyMCE iframe will be destroyed and has to be re-built.
    294                                         $( editor.getWin() ).on( 'unload', function() {
     294                                        $( editor.getWin() ).on( 'pagehide', function() {
    295295                                                _.defer( buildEditor );
    296296                                        });
  • trunk/src/wp-includes/functions.php

    r56763 r56809  
    75867586
    75877587/**
    7588  * Outputs a small JS snippet on preview tabs/windows to remove `window.name` on unload.
     7588 * Outputs a small JS snippet on preview tabs/windows to remove `window.name` when a user is navigating to another page.
    75897589 *
    75907590 * This prevents reusing the same tab for a preview when the user has navigated away.
     
    76157615
    76167616                if ( window.addEventListener ) {
    7617                         window.addEventListener( 'unload', function() { window.name = ''; }, false );
     7617                        window.addEventListener( 'pagehide', function() { window.name = ''; } );
    76187618                }
    76197619        }());
Note: See TracChangeset for help on using the changeset viewer.