fix search

This commit is contained in:
Carlos Polop 2025-04-21 02:10:13 +02:00
parent c7e13e2d81
commit 65b795a8ea

View File

@ -471,37 +471,51 @@ window.search = window.search || {};
showResults(true);
}
(async function loadSearchIndex(lang = window.lang || 'en') {
/* ───────── paths ───────── */
const branch = lang === 'en' ? 'master' : lang;
const baseRemote = `https://raw.githubusercontent.com/HackTricks-wiki/hacktricks/refs/heads/${branch}`;
const remoteJs = `${baseRemote}/searchindex.js`;
const localJs = '/searchindex.js';
(async function loadSearchIndex(lang = window.lang || "en") {
const branch = lang === "en" ? "master" : lang;
const rawUrl =
`https://raw.githubusercontent.com/HackTricks-wiki/hacktricks/refs/heads/${branch}/searchindex.js`;
const localJs = "/searchindex.js";
const TIMEOUT_MS = 5_000;
const loadScript = src =>
/* helper: inject a <script src=…> and wait for it */
const injectScript = (src) =>
new Promise((resolve, reject) => {
const s = document.createElement('script');
const s = document.createElement("script");
s.src = src;
s.onload = resolve;
s.onerror = reject;
s.onload = () => resolve(src);
s.onerror = (e) => reject(e);
document.head.appendChild(s);
});
/* ───────── 1. remote JS ───────── */
try {
await loadScript(remoteJs);
/* 1download raw JS from GitHub */
const controller = new AbortController();
const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
const res = await fetch(rawUrl, { signal: controller.signal });
clearTimeout(timer);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
/* 2wrap in a Blob so the browser sees application/javascript */
const code = await res.text();
const blobUrl = URL.createObjectURL(
new Blob([code], { type: "application/javascript" })
);
/* 3execute it */
await injectScript(blobUrl);
return init(window.search);
} catch (e) {
console.warn('Remote JS failed →', e);
} catch (eRemote) {
console.warn("Remote JS failed →", eRemote);
}
/* ───────── 2. local JS ───────── */
/* ───────── fallback: local copy ───────── */
try {
await loadScript(localJs);
await injectScript(localJs);
return init(window.search);
} catch (e) {
console.error('Local JS failed →', e);
} catch (eLocal) {
console.error("Local JS failed →", eLocal);
}
})();