From 94eee792187c4bfedb6834cdc4a490882714e1b5 Mon Sep 17 00:00:00 2001 From: bytedream Date: Sun, 28 Jul 2024 16:35:58 +0200 Subject: [PATCH] Fix voe.sx --- src/entries/background/mv2.ts | 8 ++++---- src/entries/contentScript/main.ts | 10 +++++++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/entries/background/mv2.ts b/src/entries/background/mv2.ts index 438a3c0..94fc62d 100644 --- a/src/entries/background/mv2.ts +++ b/src/entries/background/mv2.ts @@ -1,7 +1,7 @@ import './shared'; import type { Match } from '~/lib/match'; -import { storageDelete, storageGet, storageSet } from '~/lib/settings'; +import { Redirect, storageDelete, storageGet, storageSet } from '~/lib/settings'; import { getMatch } from '~/lib/match'; chrome.webRequest.onBeforeSendHeaders.addListener( @@ -27,13 +27,13 @@ chrome.webRequest.onBeforeSendHeaders.addListener( chrome.webRequest.onBeforeRedirect.addListener( async (details) => { // check if redirects origins from a previous redirect - if ((await storageGet('redirect')) === undefined) { + if ((await Redirect.get()) == null) { let match: Match | null; if ((match = await getMatch(new URL(details.url).hostname)) !== null) { - await storageSet('redirect', match.id); + await Redirect.set(match); } } else { - await storageDelete('redirect'); + await Redirect.delete(); } }, { urls: [''], types: ['main_frame', 'sub_frame'] } diff --git a/src/entries/contentScript/main.ts b/src/entries/contentScript/main.ts index 0f56c76..b3a2ab4 100644 --- a/src/entries/contentScript/main.ts +++ b/src/entries/contentScript/main.ts @@ -12,6 +12,14 @@ async function main() { redirect = true; } + // some sites have a javascript based redirect, e.g. example.com redirects to example.org by changing + // window.location.href instead of a 3XX http redirect. an empty body is a sign that such a javascript redirect + // occurred + if (document.body == null) { + await Redirect.set(match); + return; + } + const re = document.body.innerHTML.match(match.regex); if (re === null) { return; @@ -20,7 +28,7 @@ async function main() { await Redirect.delete(); } - let url: string; + let url: string | null; try { url = await match.match(re); } catch (e) {