fix search

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

View File

@ -471,39 +471,53 @@ window.search = window.search || {};
showResults(true); showResults(true);
} }
(async function loadSearchIndex(lang = window.lang || 'en') { (async function loadSearchIndex(lang = window.lang || "en") {
/* ───────── paths ───────── */ const branch = lang === "en" ? "master" : lang;
const branch = lang === 'en' ? 'master' : lang; const rawUrl =
const baseRemote = `https://raw.githubusercontent.com/HackTricks-wiki/hacktricks/refs/heads/${branch}`; `https://raw.githubusercontent.com/HackTricks-wiki/hacktricks/refs/heads/${branch}/searchindex.js`;
const remoteJs = `${baseRemote}/searchindex.js`; const localJs = "/searchindex.js";
const localJs = '/searchindex.js'; const TIMEOUT_MS = 5_000;
const TIMEOUT_MS = 5_000;
/* helper: inject a <script src=…> and wait for it */
const loadScript = src => const injectScript = (src) =>
new Promise((resolve, reject) => { new Promise((resolve, reject) => {
const s = document.createElement('script'); const s = document.createElement("script");
s.src = src; s.src = src;
s.onload = resolve; s.onload = () => resolve(src);
s.onerror = reject; s.onerror = (e) => reject(e);
document.head.appendChild(s); document.head.appendChild(s);
}); });
/* ───────── 1. remote JS ───────── */
try { try {
await loadScript(remoteJs); /* 1download raw JS from GitHub */
return init(window.search); const controller = new AbortController();
} catch (e) { const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
console.warn('Remote JS failed →', e);
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 (eRemote) {
console.warn("Remote JS failed →", eRemote);
} }
/* ───────── 2. local JS ───────── */ /* ───────── fallback: local copy ───────── */
try { try {
await loadScript(localJs); await injectScript(localJs);
return init(window.search); return init(window.search);
} catch (e) { } catch (eLocal) {
console.error('Local JS failed →', e); console.error("Local JS failed →", eLocal);
} }
})(); })();
// Exported functions // Exported functions
search.hasFocus = hasFocus; search.hasFocus = hasFocus;