about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2021-02-27 05:06:05 +0000
committerbors <bors@rust-lang.org>2021-02-27 05:06:05 +0000
commit0846043440b480e4bbf36ac19db3948f0c835bb1 (patch)
treee25be091fb649abb3b3d76c994da6fbbca029eb7
parent9fa580b1175018b0a276b0bc68f9827a106f7260 (diff)
parent51a14c7265971d4a2ab93d5aca82eb0d4261c034 (diff)
downloadrust-0846043440b480e4bbf36ac19db3948f0c835bb1.tar.gz
rust-0846043440b480e4bbf36ac19db3948f0c835bb1.zip
Auto merge of #82511 - jsha:fix-bfcache2, r=GuillaumeGomez
Fix back-forward cache in rustdoc frontend

Rustdoc's frontend set a no-op unload handler, specifically to disable
Firefox's back-forward cache because it caused a bug. It's nice to
allow the back-forward cache because it permits faster navigations.

This change addresses the issues that were caused by back-forward cache.

https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/1.5/Using_Firefox_1.5_caching
https://web.dev/bfcache/

Demo: https://jacob.hoffman-andrews.com/rust/fix-bfcache/std/string/struct.String.html

Related: #72272
-rw-r--r--src/librustdoc/html/static/main.js20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/librustdoc/html/static/main.js b/src/librustdoc/html/static/main.js
index 6da3b54289b..76449a171d7 100644
--- a/src/librustdoc/html/static/main.js
+++ b/src/librustdoc/html/static/main.js
@@ -2000,6 +2000,20 @@ function defocusSearchBar() {
                 });
             }
             search();
+
+            // This is required in firefox to avoid this problem: Navigating to a search result
+            // with the keyboard, hitting enter, and then hitting back would take you back to
+            // the doc page, rather than the search that should overlay it.
+            // This was an interaction between the back-forward cache and our handlers
+            // that try to sync state between the URL and the search input. To work around it,
+            // do a small amount of re-init on page show.
+            window.onpageshow = function(){
+                var qSearch = getQueryStringParams().search;
+                if (search_input.value === "" && qSearch) {
+                    search_input.value = qSearch;
+                }
+                search();
+            };
         }
 
         index = buildIndex(rawSearchIndex);
@@ -2958,9 +2972,3 @@ function defocusSearchBar() {
     onHashChange(null);
     window.onhashchange = onHashChange;
 }());
-
-// This is required in firefox. Explanations: when going back in the history, firefox doesn't re-run
-// the JS, therefore preventing rustdoc from setting a few things required to be able to reload the
-// previous search results (if you navigated to a search result with the keyboard, pressed enter on
-// it to navigate to that result, and then came back to this page).
-window.onunload = function(){};