」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何使用番茄鐘計時器範例從 Manifest Vo VA 逐步指南更新 Chrome 擴充功能

如何使用番茄鐘計時器範例從 Manifest Vo VA 逐步指南更新 Chrome 擴充功能

發佈於2024-11-09
瀏覽:117

將 Chrome 擴充功能從 Manifest V2 更新到 Manifest V3 對開發人員來說是關鍵的一步,因為 Google 已經逐步停止了 Manifest V2 的支援。在本文中,我們將逐步介紹將最初使用 Manifest V2 建構的 Pomodoro Timer 擴充功能升級到更新的 Manifest V3 標準的過程。

我的故事

我有一個 4 年前免費製作的 Pomodoro Timer 擴展,我收到了 Google 的通知,要求我更新 Manifest。

我的番茄計時器的原始版本是我自己設計的,用霸王龍的咆哮作為週期結束通知?它既古怪又有趣,我甚至驚訝地看到有 24 個人在使用它。

這就是它的樣子:

How to Update a Chrome Extension from Manifest Vo VA Step-by-Step Guide Using a Pomodoro Timer Example

我的妻子最近開始學習設計,由於我需要更新清單,我請她更新設計。結果在文章最後。劇透:我認為結果很棒。

為什麼升級 Manifest V3?

Manifest V3 引入了幾項關鍵更改,旨在增強 Chrome 擴充功能的隱私性、安全性和效能。這些變化包括:

  • Service Workers: 後台頁面被 Service Worker 取代,因為它們不會連續運行,所以效率更高。
  • 增強安全性:減少權限範圍並引入 declarativeNetRequest API 來管理網路請求。
  • 改進的效能:透過優化擴充功能與瀏覽器資源的互動方式,V3 確保更好的資源管理。

第 1 步:了解核心差異

在深入了解更新之前,了解 Manifest V2 和 V3 之間的關鍵變化非常重要:

  1. 後台腳本:在V2中,後台腳本連續運作。在 V3 中,這些被替換為僅在需要時執行的 Service Worker。
  2. 權限:Manifest V3 要求明確宣告所有權限,某些權限已被棄用或替換。
  3. API 變更: 一些 API 已被刪除或替換,且擴充功能不同元件之間的訊息傳遞系統已更新。

步驟2:更新清單文件

以下是如何將 Pomodoro 計時器擴展的 manifest.json 檔案從 V2 更新到 V3:

原始清單 V2 範例:

{
  "name": "Pomodoro Clock",
  "version": "1.1.0",
  "description": "Simple background timer for productivity",
  "manifest_version": 2,
  "permissions": ["storage"],
  "browser_action": {
    "default_popup": "popup.html",
    "default_icon": {
      "16": "img/tomato16.png",
      "32": "img/tomato32.png",
      "48": "img/tomato48.png",
      "128": "img/tomato128.png"
    }
  },
  "icons": {
    "16": "img/tomato16.png",
    "32": "img/tomato32.png",
    "48": "img/tomato48.png",
    "128": "img/tomato128.png"
  },
  "background": {
    "scripts": ["background.js"]
  },
  "options_page": "options.html"
}

更新了 Manifest V3 範例:

{
  "name": "Pomodoro Timer & Focus Clock",
  "version": "2.0.1",
  "description": "Boost productivity with this simple Pomodoro timer. Focus on tasks, minimize distractions, and manage your time effectively.",
  "manifest_version": 3,
  "permissions": ["storage","notifications","alarms"],
  "action": {
    "default_popup": "popup.html",
    "default_icon": {
      "16": "img/tomato16.png",
      "32": "img/tomato32.png",
      "48": "img/tomato48.png",
      "128": "img/tomato128.png"
    }
  },
  "icons": {
    "16": "img/tomato16.png",
    "32": "img/tomato32.png",
    "48": "img/tomato48.png",
    "128": "img/tomato128.png"
  },
  "background": {
    "service_worker": "background.js"
  }
}

清單中的主要變更:

後台腳本:

  • V2: "background": {"scripts": ["background.js"]}
  • V3: "background": {"service_worker": "background.js"}

在 V3 中,後台腳本被 Service Worker 取代。 Service Worker 僅在必要時運行,以提高資源效率。

操作與瀏覽器操作:

  • V2: "browser_action": { ... }
  • V3: "動作": { ... }

browser_action 已被 action 取代,這鞏固了功能並簡化了清單。

步驟 3:更新背景腳本以使用 Service Worker

我的擴充功能在後台使用了一個簡單的 setInterval() ,對於服務工作者,此行為將不起作用,因為為了節省瀏覽器資源,它僅在需要時運行。

在我的例子中,我必須修改計時器並將時間戳記儲存在儲存中,使用警報來安排通知呼叫者的觸發程式碼運行。

當然,使用chrome的內建通知來發送通知,以擺脫惱人的霸王龍後方。如果我的擴充功能的早期用戶閱讀了我的內容,我真的很抱歉?

這裡不會有程式碼範例,因為它太具體了。

結論

結果如下。我覺得很酷。簡約且易於使用

How to Update a Chrome Extension from Manifest Vo VA Step-by-Step Guide Using a Pomodoro Timer Example

更新並沒有那麼困難,主要是了解舊的後台腳本和服務工作者之間的區別,但是要小心警報,我什至在測試時使 Chrome 崩潰了幾次?

隨意嘗試更新的番茄鐘計時器和焦點時鐘擴展,祝您更新成功!

版本聲明 本文轉載於:https://dev.to/kopchikovich/how-to-update-a-chrome-extension-from-manifest-v2-to-v3-a-step-by-step-guide-using-a- pomodoro-timer-example-5ene?1如有侵犯,請洽[email protected]刪除
最新教學 更多>
  • Go語言垃圾回收如何處理切片內存?
    Go語言垃圾回收如何處理切片內存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片時,了解垃圾收集行為至關重要,以避免潛在的內存洩...
    程式設計 發佈於2025-05-06
  • 如何使用不同數量列的聯合數據庫表?
    如何使用不同數量列的聯合數據庫表?
    合併列數不同的表 當嘗試合併列數不同的數據庫表時,可能會遇到挑戰。一種直接的方法是在列數較少的表中,為缺失的列追加空值。 例如,考慮兩個表,表 A 和表 B,其中表 A 的列數多於表 B。為了合併這些表,同時處理表 B 中缺失的列,請按照以下步驟操作: 確定表 B 中缺失的列,並將它們添加到表的...
    程式設計 發佈於2025-05-06
  • 如何在無序集合中為元組實現通用哈希功能?
    如何在無序集合中為元組實現通用哈希功能?
    在未訂購的集合中的元素要糾正此問題,一種方法是手動為特定元組類型定義哈希函數,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    程式設計 發佈於2025-05-06
  • 如何將來自三個MySQL表的數據組合到新表中?
    如何將來自三個MySQL表的數據組合到新表中?
    mysql:從三個表和列的新表創建新表 答案:為了實現這一目標,您可以利用一個3-way Join。 選擇p。 *,d.content作為年齡 來自人為p的人 加入d.person_id = p.id上的d的詳細信息 加入T.Id = d.detail_id的分類法 其中t.taxonomy ...
    程式設計 發佈於2025-05-06
  • Async Void vs. Async Task在ASP.NET中:為什麼Async Void方法有時會拋出異常?
    Async Void vs. Async Task在ASP.NET中:為什麼Async Void方法有時會拋出異常?
    在ASP.NET async void void async void void void void void的設計無需返回asynchroncon而無需返回任務對象。他們在執行過程中增加未償還操作的計數,並在完成後減少。在某些情況下,這種行為可能是有益的,例如未期望或明確預期操作結果的火災和...
    程式設計 發佈於2025-05-06
  • Python中嵌套函數與閉包的區別是什麼
    Python中嵌套函數與閉包的區別是什麼
    嵌套函數與python 在python中的嵌套函數不被考慮閉合,因為它們不符合以下要求:不訪問局部範圍scliables to incling scliables在封裝範圍外執行範圍的局部範圍。 make_printer(msg): DEF打印機(): 打印(味精) ...
    程式設計 發佈於2025-05-06
  • 如何避免Go語言切片時的內存洩漏?
    如何避免Go語言切片時的內存洩漏?
    ,a [j:] ...雖然通常有效,但如果使用指針,可能會導致內存洩漏。這是因為原始的備份陣列保持完整,這意味著新切片外部指針引用的任何對象仍然可能佔據內存。 copy(a [i:] 對於k,n:= len(a)-j i,len(a); k
    程式設計 發佈於2025-05-06
  • 如何為PostgreSQL中的每個唯一標識符有效地檢索最後一行?
    如何為PostgreSQL中的每個唯一標識符有效地檢索最後一行?
    postgresql:為每個唯一標識符在postgresql中提取最後一行,您可能需要遇到與數據集合中每個不同標識的信息相關的信息。考慮以下數據:[ 1 2014-02-01 kjkj 在數據集中的每個唯一ID中檢索最後一行的信息,您可以在操作員上使用Postgres的有效效率: id dat...
    程式設計 發佈於2025-05-06
  • 使用jQuery如何有效修改":after"偽元素的CSS屬性?
    使用jQuery如何有效修改":after"偽元素的CSS屬性?
    在jquery中了解偽元素的限制:訪問“ selector 嘗試修改“:”選擇器的CSS屬性時,您可能會遇到困難。 This is because pseudo-elements are not part of the DOM (Document Object Model) and are th...
    程式設計 發佈於2025-05-06
  • 查找當前執行JavaScript的腳本元素方法
    查找當前執行JavaScript的腳本元素方法
    如何引用當前執行腳本的腳本元素在某些方案中理解問題在某些方案中,開發人員可能需要將其他腳本動態加載其他腳本。但是,如果Head Element尚未完全渲染,則使用document.getElementsbytagname('head')[0] .appendChild(v)的常規方...
    程式設計 發佈於2025-05-06
  • HTML格式標籤
    HTML格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2025-05-06
  • 在C#中如何高效重複字符串字符用於縮進?
    在C#中如何高效重複字符串字符用於縮進?
    在基於項目的深度下固定字符串時,重複一個字符串以進行凹痕,很方便有效地有一種有效的方法來返回字符串重複指定的次數的字符串。使用指定的次數。 constructor 這將返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.W...
    程式設計 發佈於2025-05-06
  • 左連接為何在右表WHERE子句過濾時像內連接?
    左連接為何在右表WHERE子句過濾時像內連接?
    左JOIN CONUNDRUM:WITCHING小時在數據庫Wizard的領域中變成內在的加入很有趣,當將c.foobar條件放置在上面的Where子句中時,據說左聯接似乎會轉換為內部連接。僅當滿足A.Foo和C.Foobar標準時,才會返回結果。 為什麼要變形?關鍵在於其中的子句。當左聯接的右側...
    程式設計 發佈於2025-05-06
  • 在Pandas中如何將年份和季度列合併為一個週期列?
    在Pandas中如何將年份和季度列合併為一個週期列?
    pandas data frame thing commans date lay neal and pree pree'和pree pree pree”,季度 2000 q2 這個目標是通過組合“年度”和“季度”列來創建一個新列,以獲取以下結果: [python中的concate...
    程式設計 發佈於2025-05-06

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3