From d1cb2cc4907d659994be62baba8b1a42c345ff0a Mon Sep 17 00:00:00 2001 From: Hakadao Date: Sun, 23 Jul 2023 15:14:05 +0800 Subject: [PATCH] feat: adapted firefox --- src/contentScripts/index.ts | 60 +++++++++++++++++-------------------- src/manifest.ts | 2 +- src/utils/authProvider.ts | 3 +- 3 files changed, 30 insertions(+), 35 deletions(-) diff --git a/src/contentScripts/index.ts b/src/contentScripts/index.ts index e7874284..67907816 100644 --- a/src/contentScripts/index.ts +++ b/src/contentScripts/index.ts @@ -6,26 +6,39 @@ import { setupApp } from '~/logic/common-setup' import { i18n } from '~/utils/i18n' import { SVG_ICONS } from '~/utils/svgIcons' -let app: AppType | null = null; +let app: any -// Firefox `browser.tabs.executeScript()` requires scripts return a primitive value -(() => { - // console.info('[vitesse-webext] Hello world from content script') +const isFirefox: boolean = /Firefox/i.test(navigator.userAgent) - // // communication example: send previous tab title from background page - // onMessage('tab-prev', ({ data }) => { - // console.log(`[vitesse-webext] Navigate from page "${data.title}"`) - // }) +if (isFirefox) { + let isFirstScriptExecute = true + document.addEventListener('beforescriptexecute', () => { + if (!isFirstScriptExecute) + return + injectApp() + + isFirstScriptExecute = false + }) +} +else { + // Firefox `browser.tabs.executeScript()` requires scripts return a primitive value + + document.addEventListener('DOMContentLoaded', () => { + injectApp() + }) +} + +function injectApp() { const currentUrl = document.URL if ( /https?:\/\/bilibili.com\/?$/.test(currentUrl) - || /https?:\/\/www.bilibili.com\/?$/.test(currentUrl) - || /https?:\/\/www.bilibili.com\/index.html$/.test(currentUrl) - || /https?:\/\/bilibili.com\/\?spm_id_from=.*/.test(currentUrl) - || /https?:\/\/www.bilibili.com\/\?spm_id_from=(.)*/.test(currentUrl) - // || /https?:\/\/(www.)?bilibili.com\/video\/.*/.test(currentUrl) + || /https?:\/\/www.bilibili.com\/?$/.test(currentUrl) + || /https?:\/\/www.bilibili.com\/index.html$/.test(currentUrl) + || /https?:\/\/bilibili.com\/\?spm_id_from=.*/.test(currentUrl) + || /https?:\/\/www.bilibili.com\/\?spm_id_from=(.)*/.test(currentUrl) + // || /https?:\/\/(www.)?bilibili.com\/video\/.*/.test(currentUrl) ) { const originalPageContent = document.querySelector('#i_cecream') if (originalPageContent) @@ -52,25 +65,6 @@ let app: AppType | null = null; setupApp(app) app.use(i18n).mount(root) } - // else if (/https?:\/\/(www.)?bilibili.com\/video\/.*/.test(currentUrl)) { - // const originalPageContent = document.querySelector('#app') - // if (originalPageContent) - // originalPageContent.innerHTML = '' - - // const container = document.createElement('div') - // const root = document.createElement('div') - // const styleEl = document.createElement('link') - // styleEl.setAttribute('rel', 'stylesheet') - // styleEl.setAttribute('href', browser.runtime.getURL('dist/contentScripts/style.css')) - // container.id = 'bewly' - // container.appendChild(styleEl) - // container.appendChild(root) - // document.body.appendChild(container) - - // const app = createApp(App) - // setupApp(app) - // app.use(i18n).mount(root) - // } -})() +} export default app as AppType diff --git a/src/manifest.ts b/src/manifest.ts index d7c43bb3..7658db95 100644 --- a/src/manifest.ts +++ b/src/manifest.ts @@ -41,7 +41,7 @@ export async function getManifest() { { matches: ['http://www.bilibili.com/*', 'https://www.bilibili.com/*'], js: ['./dist/contentScripts/index.global.js'], - // run_at: 'document_start', + run_at: 'document_start', match_about_blank: true, }, ], diff --git a/src/utils/authProvider.ts b/src/utils/authProvider.ts index 5f82b18a..d07161ac 100644 --- a/src/utils/authProvider.ts +++ b/src/utils/authProvider.ts @@ -11,7 +11,8 @@ import { accessKey } from '~/logic/storage' import app from '~/contentScripts/index' let vueGlobalProperties: ComponentCustomProperties & Record -nextTick(() => { + +document.addEventListener('load', () => { vueGlobalProperties = app.config.globalProperties })