Tab Roulette - 我的第一個擴展
我目前的目標是創建一個簡單的 Chrome 擴展,利用擴展框架的後台功能。
回顧一下,後台腳本作為服務工作者運行,主要設計用於處理不需要直接使用者互動的任務。
它的關鍵角色之一是充當通訊中心或事件處理程序,作為瀏覽器擴充架構中唯一持久且可靠的元件。與短暫的內容腳本、彈出視窗或選項頁面不同,後台服務工作執行緒在終止處理傳入事件時會自動重新啟動,從而確保連續性。
我計劃利用後台腳本的這種功能作為我的擴充功能的中央控制器。
用例
第一個 Chrome 擴充功能將非常簡單。它將偵聽擴充功能操作圖示上的點擊,並透過觸發類似輪盤賭的行為進行回應。輪盤賭將在短時間內按順序啟動目前在使用者瀏覽器中開啟的選項卡,直到隨機選擇一個選項卡。
如您所見,此擴充沒有實際目的,而純粹是作為學習練習。
清單
{ "name": "TabRoulette", "version": "0.0.1", "manifest_version": 3, "icons": { "16": "images/icon16.png", "32": "images/icon32.png", "48": "images/icon32.png", "128": "images/icon128.png" }, "action": { "default_title": "Click to start", "default_icon": { "16": "images/icon16.png", "24": "images/icon24.png", "32": "images/icon32.png" } }, "background": { "service_worker": "background.js" } }
除了清單中指定的用於 Chrome Web Store 和擴充功能管理介面的圖示之外,最重要的新增是操作屬性。此屬性配置單擊工具列圖示時擴充的行為。在我們的例子中,它指示服務工作線程在用戶互動時啟動選項卡輪盤賭。
考慮到
我的程式碼使用 ES 導入,但如前所述,service_worker 沒有明確聲明為模組。怎麼還有效?
"background": { "service_worker": "service-worker.js", "type": "module" }
這些導入由 Vite 在捆綁過程中處理和解決。
背景
如前所述,後台腳本將監聽操作圖示的點擊並啟動選項卡輪盤作為回應。
chrome.action.onClicked.addListener(async () => { ... })
要強調的偵聽器邏輯的關鍵方面:首先,我需要收集目前在活動視窗中開啟的所有標籤。這很重要,因為我的程式碼需要引用這些選項卡才能按順序循環瀏覽它們。
const currentWindow = await chrome.windows.getCurrent(); const windowTabs = await chrome.tabs.query({ windowId: currentWindow.id, });
我最初在使用 chrome.tabs.query 而不指定 windowId 時感到困惑,因為它返回所有打開的瀏覽器視窗中的所有選項卡,而我只想要活動視窗中的選項卡。由於清單中的選項卡數量較多,這導致了意外結果。
一旦我了解這種行為,按順序啟動選項卡就變得簡單了。它只涉及更新選項卡屬性以按順序將每個選項卡設定為活動狀態,直到最終選擇隨機選項卡。
{ "name": "TabRoulette", "version": "0.0.1", "manifest_version": 3, "icons": { "16": "images/icon16.png", "32": "images/icon32.png", "48": "images/icon32.png", "128": "images/icon128.png" }, "action": { "default_title": "Click to start", "default_icon": { "16": "images/icon16.png", "24": "images/icon24.png", "32": "images/icon32.png" } }, "background": { "service_worker": "background.js" } }
我想要實現的另一個目標是調整選項卡啟動的速度 - 快速啟動並在接近結束時減慢速度。為了實現這一點,我在初始測試中使用的本機 setInterval 函數是不夠的。相反,我實現了一個小實用程序,它允許我創建一個可調整的間隔,提供一種根據需要動態修改其時間的方法。
"background": { "service_worker": "service-worker.js", "type": "module" }
就是這樣——一個帶有有趣用例的簡單擴展,作為深入研究瀏覽器擴展世界的藉口。如果您對詳細資訊感到好奇,我也會與您分享原始程式碼。
哦,我還使用這個專案來探索發布過程,我發現這非常簡單。現在就等審稿和最終發表了。
https://github.com/ivaneffable/tabRoulette
以上是Tab Roulette - 我的第一個擴展的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務
