簡體   English   中英

內容腳本中的Chrome擴展程序選項

[英]Chrome Extension Options from a content script

我正在將Firefox擴展程序移植到Chrome,缺少同步首選項服務使生活變得很有趣。

我為我的用戶提供了一個選項頁面,我在這里使用以下方法: https : //developer.chrome.com/extensions/options 我將運行內容腳本以從頁面獲取數據,並使用sendMessage發送/接收對后台腳本的回調。

內容腳本需要訪問我的擴展選項。 在處理之前,需要這些。 當然,存儲API是異步的。 我曾嘗試與Stratify.js作弊,以強制Storage API同步運行,但這很丑陋。

那讓我寫這樣的代碼:

chrome.storage.sync.get(defaultPrefs, function(myPrefs) {

     //Do all my webpage processing here, 
     //basically writing my entire Extension inside
     // this call to chrome.storage.sync.get()
}

我之前已經看到過幾個解決方案提出的問題,但是它們大多使用localStorage,因為我想從這里使用我的偏好設置,所以該方法不起作用。

這只是感覺不對,但是如果我要將Storage Sync API用於我的擴展程序首選項,那我就有些困惑。 我使用過的localStorage解決方案主要涉及到sendMessage的調用,而使我陷入了同樣的回調模式。 我想念什么嗎?

您不會丟失任何東西。 Google API遵循Javascript原理,因此是回調驅動的。 而且您應該接受它才能成為一名優秀的javascript開發人員。

同步存儲采用異步模式的原因是網絡的等待時間以及從同步存儲發送/接收數據的時間可能較長。 Javascript VM是單線程的,因此,如果對存儲的調用是同步的並且要花費一些時間,則用戶界面將凍結以等待響應。 用戶體驗不可接受。 避免此行為的唯一方法是使用回調。 您可以提供請求完成后要執行的功能。

這不是曾經有過的更好的模式,但是它確實起作用。 但是它有一個局限性:回調地獄。 您可以嘗試使用Promises進行管理,並定義僅執行一項原子操作的簡單和簡短函數。 使用函數式編程方法可以幫助實現此目的。

避免這種情況的另一種方法是創建一個對象,該對象將自動與存儲進行同步。 它允許您完全同步地使用它,但是處理可能的錯誤更加困難。 我在這里做了一個。 它缺少錯誤處理,可以進行很大的改進,但是您可以理解。

稍后我會嘗試改善這一點,但是我沒有時間...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM