Make WordPress Core


Ignore:
Timestamp:
11/21/2016 04:55:20 PM (8 years ago)
Author:
westonruter
Message:

Customize: Remove iframe-specific behaviors from customize preview when previewing on frontend and not contained inside iframe.

  • Strip out customize_messenger_channel from preview window URL when not contained in iframe.
  • Allow interacting with unpreviewable links and forms when previewing customized state on frontend.

See #30937.
Fixes #38867.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class-wp-customize-manager.php

    r39320 r39332  
    13541354        wp_enqueue_script( 'customize-preview' );
    13551355        add_action( 'wp_head', array( $this, 'customize_preview_loading_style' ) );
     1356        add_action( 'wp_head', array( $this, 'remove_frameless_preview_messenger_channel' ) );
    13561357        add_action( 'wp_footer', array( $this, 'customize_preview_settings' ), 20 );
    13571358        add_filter( 'get_edit_post_link', '__return_empty_string' );
     
    14861487            }
    14871488        </style><?php
     1489    }
     1490
     1491    /**
     1492     * Remove customize_messenger_channel query parameter from the preview window when it is not in an iframe.
     1493     *
     1494     * This ensures that the admin bar will be shown. It also ensures that link navigation will
     1495     * work as expected since the parent frame is not being sent the URL to navigate to.
     1496     *
     1497     * @since 4.7.0
     1498     * @access public
     1499     */
     1500    public function remove_frameless_preview_messenger_channel() {
     1501        if ( ! $this->messenger_channel ) {
     1502            return;
     1503        }
     1504        ?>
     1505        <script>
     1506        ( function() {
     1507            var urlParser, oldQueryParams, newQueryParams, i;
     1508            if ( parent !== window ) {
     1509                return;
     1510            }
     1511            urlParser = document.createElement( 'a' );
     1512            urlParser.href = location.href;
     1513            oldQueryParams = urlParser.search.substr( 1 ).split( /&/ );
     1514            newQueryParams = [];
     1515            for ( i = 0; i < oldQueryParams.length; i += 1 ) {
     1516                if ( ! /^customize_messenger_channel=/.test( oldQueryParams[ i ] ) ) {
     1517                    newQueryParams.push( oldQueryParams[ i ] );
     1518                }
     1519            }
     1520            urlParser.search = newQueryParams.join( '&' );
     1521            if ( urlParser.search !== location.search ) {
     1522                location.replace( urlParser.href );
     1523            }
     1524        } )();
     1525        </script>
     1526        <?php
    14881527    }
    14891528
Note: See TracChangeset for help on using the changeset viewer.