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.

git-svn-id: https://develop.svn.wordpress.org/trunk@37619 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Andrew Ozz 2016-06-02 01:29:25 +00:00
parent 014fda7a20
commit 3afb9f4839
3 changed files with 43 additions and 19 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
}