fix: CDX fetch ohne custom headers (CORS preflight vermeiden)
This commit is contained in:
@@ -13,30 +13,40 @@ function getDomain(url) {
|
||||
catch { return url; }
|
||||
}
|
||||
|
||||
// Wayback CDX – direkt im Browser (CORS: * → kein Server-Proxy nötig)
|
||||
// Wayback CDX – direkt im Browser
|
||||
async function searchWayback(targetUrl) {
|
||||
const cdx = `https://web.archive.org/cdx/search/cdx?url=${encodeURIComponent(targetUrl)}&output=json&limit=1&fl=timestamp&filter=statuscode:200&fastLatest=true`;
|
||||
const res = await fetch(cdx);
|
||||
if (!res.ok) throw new Error(`CDX Fehler: ${res.status}`);
|
||||
let res;
|
||||
try {
|
||||
// Ohne custom headers – minimaler Request damit CORS-Preflight entfällt
|
||||
res = await fetch(cdx);
|
||||
} catch (e) {
|
||||
throw new Error('Netzwerkfehler: ' + e.message);
|
||||
}
|
||||
if (!res.ok) throw new Error(`CDX ${res.status}`);
|
||||
const data = await res.json();
|
||||
if (!Array.isArray(data) || data.length < 2 || !data[1]?.[0]) return null;
|
||||
return `https://web.archive.org/web/${data[1][0]}/${targetUrl}`;
|
||||
}
|
||||
|
||||
// Wayback Save – direkt im Browser via no-cors fetch (fire-and-forget)
|
||||
// Dann CDX pollen bis Snapshot erscheint
|
||||
// Wayback Save + CDX-Polling
|
||||
async function saveAndPollWayback(targetUrl, onStatus) {
|
||||
// Save abschießen (no-cors: kein Response lesbar, aber Request geht raus)
|
||||
// Save via no-cors (kein lesbarer Response, aber Archivierung wird getriggert)
|
||||
try {
|
||||
await fetch(`https://web.archive.org/save/${targetUrl}`, { mode: 'no-cors' });
|
||||
} catch { /* ignorieren – no-cors wirft immer */ }
|
||||
fetch(`https://web.archive.org/save/${targetUrl}`, {
|
||||
method: 'GET',
|
||||
mode: 'no-cors',
|
||||
}).catch(() => {});
|
||||
} catch {}
|
||||
|
||||
// CDX pollen: 8x alle 5s = max 40s
|
||||
for (let i = 0; i < 8; i++) {
|
||||
onStatus(`Warte auf Snapshot... (${(i+1)*5}s)`);
|
||||
await new Promise(r => setTimeout(r, 5000));
|
||||
const url = await searchWayback(targetUrl);
|
||||
if (url) return url;
|
||||
onStatus(`Warte auf Snapshot... (${(i + 1) * 5}s)`);
|
||||
try {
|
||||
const url = await searchWayback(targetUrl);
|
||||
if (url) return url;
|
||||
} catch {}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user