diff --git a/src/librustdoc/html/render/write_shared.rs b/src/librustdoc/html/render/write_shared.rs index c4a6e92003184..017cc07faeafd 100644 --- a/src/librustdoc/html/render/write_shared.rs +++ b/src/librustdoc/html/render/write_shared.rs @@ -328,8 +328,8 @@ pub(super) fn write_shared( v.push_str( r#"\ ]')); -if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)}; -if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex}; +if (typeof exports !== 'undefined') exports.searchIndex = searchIndex; +else runSearchIfFullyLoaded(); "#, ); Ok(v.into_bytes()) diff --git a/src/librustdoc/html/static/js/main.js b/src/librustdoc/html/static/js/main.js index 63ab56053af9f..b35fc38591c0f 100644 --- a/src/librustdoc/html/static/js/main.js +++ b/src/librustdoc/html/static/js/main.js @@ -188,6 +188,7 @@ function preLoadCss(cssUrl) { function loadScript(url) { const script = document.createElement("script"); script.src = url; + script.setAttribute('async', ''); document.head.append(script); } diff --git a/src/librustdoc/html/static/js/search.js b/src/librustdoc/html/static/js/search.js index ccb54e14a5cb2..1c8944545c587 100644 --- a/src/librustdoc/html/static/js/search.js +++ b/src/librustdoc/html/static/js/search.js @@ -3354,9 +3354,7 @@ ${item.displayPath}${name}\ if (typeof window !== "undefined") { window.initSearch = initSearch; - if (window.searchIndex !== undefined) { - initSearch(window.searchIndex); - } + runSearchIfFullyLoaded(); } else { // Running in Node, not a browser. Run initSearch just to produce the // exports. diff --git a/src/librustdoc/html/static/js/storage.js b/src/librustdoc/html/static/js/storage.js index ac9c6f377b82a..29d190903d7ff 100644 --- a/src/librustdoc/html/static/js/storage.js +++ b/src/librustdoc/html/static/js/storage.js @@ -61,6 +61,15 @@ function onEach(arr, func) { return false; } +let nbSearchScriptLoaded = 0; +// eslint-disable-next-line no-unused-vars +function runSearchIfFullyLoaded() { + nbSearchScriptLoaded += 1; + if (nbSearchScriptLoaded === 2) { + window.initSearch(window.searchIndex); + } +} + /** * Turn an HTMLCollection or a NodeList into an Array, then run a callback * for every element. This is useful because iterating over an HTMLCollection