Editor: ensure the page is refreshed when the users navigate to it with the Back or Forward buttons. In these cases the browsers usually load the page from (memory) cache and it contains the old editor content.

Fixes #35852.
Built from https://develop.svn.wordpress.org/trunk@37619


git-svn-id: http://core.svn.wordpress.org/trunk@37587 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
Andrew Ozz 2016-06-02 01:30:27 +00:00
parent a6de56b473
commit 82ee5ca020
4 changed files with 44 additions and 20 deletions

View File

@ -43,7 +43,8 @@ add_action( 'admin_head', 'wp_color_scheme_settings' );
add_action( 'admin_head', 'wp_site_icon' );
add_action( 'admin_head', '_ipad_meta' );
add_action( 'post_edit_form_tag', 'post_form_autocomplete_off' );
add_action( 'admin_print_scripts-post.php', 'wp_page_reload_on_back_button_js' );
add_action( 'admin_print_scripts-post-new.php', 'wp_page_reload_on_back_button_js' );
add_action( 'update_option_home', 'update_home_siteurl', 10, 2 );
add_action( 'update_option_siteurl', 'update_home_siteurl', 10, 2 );

View File

@ -1373,3 +1373,26 @@ function add_utility_page( $page_title, $menu_title, $capability, $menu_slug, $f
return add_menu_page($page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $_wp_last_utility_menu);
}
/**
* Disables autocomplete on the 'post' form (Add/Edit Post screens) for WebKit browsers,
* as they disregard the autocomplete setting on the editor textarea. That can break the editor
* when the user navigates to it with the browser's Back button. See #28037
*
* Replaced with wp_page_reload_on_back_button_js() that also fixes this problem.
*
* @since 4.0.0
* $deprecated 4.6.0
*
* @global bool $is_safari
* @global bool $is_chrome
*/
function post_form_autocomplete_off() {
global $is_safari, $is_chrome;
_deprecated_function( __FUNCTION__, '4.6' );
if ( $is_safari || $is_chrome ) {
echo ' autocomplete="off"';
}
}

View File

@ -891,24 +891,6 @@ function heartbeat_autosave( $response, $data ) {
return $response;
}
/**
* Disables autocomplete on the 'post' form (Add/Edit Post screens) for WebKit browsers,
* as they disregard the autocomplete setting on the editor textarea. That can break the editor
* when the user navigates to it with the browser's Back button. See #28037
*
* @since 4.0.0
*
* @global bool $is_safari
* @global bool $is_chrome
*/
function post_form_autocomplete_off() {
global $is_safari, $is_chrome;
if ( $is_safari || $is_chrome ) {
echo ' autocomplete="off"';
}
}
/**
* Remove single-use URL parameters and create canonical link based on new URL.
*
@ -936,3 +918,21 @@ function wp_admin_canonical_url() {
</script>
<?php
}
/**
* Output JS that reloads the page if the user navigated to it with the Back or Forward button.
*
* Used on the Edit Post and Add New Post screens. Needed to ensure the page is not loaded from browser cache,
* so the post title and editor content are the last saved versions. Ideally this script should run first in the head.
*
* @since 4.6.0
*/
function wp_page_reload_on_back_button_js() {
?>
<script>
if ( typeof performance !== 'undefined' && performance.navigation && performance.navigation.type === 2 ) {
document.location.reload( true );
}
</script>
<?php
}

View File

@ -4,7 +4,7 @@
*
* @global string $wp_version
*/
$wp_version = '4.6-alpha-37618';
$wp_version = '4.6-alpha-37619';
/**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.