mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
fix search
This commit is contained in:
parent
c7e13e2d81
commit
65b795a8ea
@ -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);
|
/* 1 — download 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}`);
|
||||||
|
|
||||||
|
/* 2 — wrap in a Blob so the browser sees application/javascript */
|
||||||
|
const code = await res.text();
|
||||||
|
const blobUrl = URL.createObjectURL(
|
||||||
|
new Blob([code], { type: "application/javascript" })
|
||||||
|
);
|
||||||
|
|
||||||
|
/* 3 — execute 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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user