From f0afa13b8d164d740a7d0b34e383fa8cb507cb6a Mon Sep 17 00:00:00 2001 From: Steven Date: Thu, 9 Nov 2023 19:10:10 +0800 Subject: [PATCH] chore: update extension with web request listener --- frontend/extension/package.json | 12 +++++--- frontend/extension/src/background.ts | 43 +++++++++++++++++----------- 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/frontend/extension/package.json b/frontend/extension/package.json index c157cb2..28520d9 100644 --- a/frontend/extension/package.json +++ b/frontend/extension/package.json @@ -1,7 +1,7 @@ { "name": "slash-extension", "displayName": "Slash", - "version": "1.0.0", + "version": "1.0.1", "description": "An open source, self-hosted bookmarks and link sharing platform. Save and share your links very easily.", "scripts": { "dev": "plasmo dev", @@ -50,11 +50,15 @@ }, "manifest": { "omnibox": { - "keyword": "s" + "keyword": "s/" }, "permissions": [ - "tabs", - "storage" + "activeTab", + "storage", + "webRequest" + ], + "host_permissions": [ + "*://*/*" ] } } diff --git a/frontend/extension/src/background.ts b/frontend/extension/src/background.ts index d72237a..58c66ac 100644 --- a/frontend/extension/src/background.ts +++ b/frontend/extension/src/background.ts @@ -4,29 +4,40 @@ import type { Shortcut } from "@/types/proto/api/v2/shortcut_service"; const storage = new Storage(); const urlRegex = /https?:\/\/s\/(.+)/; -chrome.tabs.onUpdated.addListener(async (tabId, _, tab) => { - if (!tab.url) { - return; - } +chrome.webRequest.onBeforeRequest.addListener( + (param) => { + (async () => { + if (!param.url) { + return; + } - const shortcutName = getShortcutNameFromUrl(tab.url); - if (shortcutName) { - const shortcuts = (await storage.getItem("shortcuts")) || []; - const shortcut = shortcuts.find((shortcut) => shortcut.name === shortcutName); - if (!shortcut) { - return; - } - return chrome.tabs.update(tabId, { url: shortcut.link }); - } -}); + const shortcutName = getShortcutNameFromUrl(param.url); + if (shortcutName) { + const shortcuts = (await storage.getItem("shortcuts")) || []; + const shortcut = shortcuts.find((shortcut) => shortcut.name === shortcutName); + if (!shortcut) { + return; + } + return chrome.tabs.update({ url: shortcut.link }); + } + })(); + }, + { urls: ["*://s/*", "*://*/search*"] } +); -chrome.omnibox.onInputEntered.addListener(async (text) => { +chrome.omnibox.onInputEntered.addListener(async (text, disposition) => { const shortcuts = (await storage.getItem("shortcuts")) || []; const shortcut = shortcuts.find((shortcut) => shortcut.name === text); if (!shortcut) { return; } - return chrome.tabs.update({ url: shortcut.link }); + if (disposition === "currentTab") { + chrome.tabs.update({ url: shortcut.link }); + } else if (disposition === "newForegroundTab") { + chrome.tabs.create({ url: shortcut.link }); + } else if (disposition === "newBackgroundTab") { + chrome.tabs.create({ url: shortcut.link, active: false }); + } }); const getShortcutNameFromUrl = (urlString: string) => {