diff --git a/source/background-scripts/initialize.ts b/source/background-scripts/initialize.ts index a35ee9f..bf2dfcf 100644 --- a/source/background-scripts/initialize.ts +++ b/source/background-scripts/initialize.ts @@ -68,7 +68,16 @@ browser.webNavigation.onBeforeNavigate.addListener(async (details) => { break; } - const redirectedUrl = redirect.redirect(url); + let redirectedUrl = redirect.redirect(url); + if (typeof redirectedUrl === 'string') { + try { + redirectedUrl = new URL(redirectedUrl); + } catch { + redirectedUrl = `https://${redirectedUrl as string}`; + redirectedUrl = new URL(redirectedUrl); + } + } + await browser.tabs.update(details.tabId, {url: redirectedUrl.href}); await browser.storage.local.set({ latestTime: Date.now(), diff --git a/source/redirect/base.ts b/source/redirect/base.ts index 8c4facc..9d18195 100644 --- a/source/redirect/base.ts +++ b/source/redirect/base.ts @@ -48,5 +48,5 @@ export abstract class Redirect { return false; } - public abstract redirect(url: URL | string): URL; + public abstract redirect(url: URL | string): URL | string; } diff --git a/source/redirect/exports.ts b/source/redirect/exports.ts index 351e9fe..42de812 100644 --- a/source/redirect/exports.ts +++ b/source/redirect/exports.ts @@ -8,7 +8,7 @@ export * from './hostname.js'; export * from './regex.js'; export * from './simple.js'; -export type Redirects = HostnameRedirect | SimpleRedirect; +export type Redirects = HostnameRedirect | RegexRedirect | SimpleRedirect; export function parseRedirect( parameters: RedirectParameters, diff --git a/source/redirect/regex.ts b/source/redirect/regex.ts index afee6fa..6ab7a6d 100644 --- a/source/redirect/regex.ts +++ b/source/redirect/regex.ts @@ -1,9 +1,9 @@ import {Redirect} from './base.js'; export class RegexRedirect extends Redirect { - public redirect(redirect: URL | string): URL { + public redirect(redirect: URL | string): string { const url = redirect instanceof URL ? redirect.href : redirect; const regex = new RegExp(this.parameters.matcherValue, 'gi'); - return new URL(url.replace(regex, this.parameters.redirectValue)); + return url.replace(regex, this.parameters.redirectValue); } } diff --git a/source/redirect/simple.ts b/source/redirect/simple.ts index 6b580d8..e8fd0be 100644 --- a/source/redirect/simple.ts +++ b/source/redirect/simple.ts @@ -1,7 +1,7 @@ import {Redirect} from './base.js'; export class SimpleRedirect extends Redirect { - public redirect(): URL { - return new URL(this.parameters.redirectValue); + public redirect(): string { + return this.parameters.redirectValue; } } diff --git a/tests/redirect.test.ts b/tests/redirect.test.ts index 73bc6e1..356137c 100644 --- a/tests/redirect.test.ts +++ b/tests/redirect.test.ts @@ -84,7 +84,7 @@ test('Redirect.redirect', (t) => { t.snapshot( { original: url instanceof URL ? url.href : url, - redirected: redirect.redirect(url).href, + redirected: new URL(redirect.redirect(url)).href, }, `${index} ${redirect.constructor.name}`, );