2

tl;dr: QUOTA_BYTES_PER_ITEM に関する同期エラーですが、アイテムが小さいため、何が問題なのかを突き止めるのに助けが必要です。

そのため、Google Chrome 拡張機能でこのエラーが発生していますが、保存しようとしているものが 400 バイトを超えないため (シリアル化されており、 JSON 文字列)、QUOTA_BYTES_PER_ITEMisを考慮すると4096、その制限には程遠いです。

何か間違った計算をしている (可能性が高い) か、間違ったことをしている (可能性は低い!)。

私の拡張機能のコードを表示して、 Web ストアからインストールできます

この問題で重要な部分は次の (CoffeeScript) です。

# Object: Default settings
defaultSettings =
    type: 'single'
    chars: 14
    howmany: 1
    security:
        lowercase: true
        uppercase: true
        special: true
        punctuation: true
        readable: false

# Object: Current settings
paGenSettings = defaultSettings

# Function: Save Settings
saveSettings = (settings, notify) ->
    if validateSettings settings, true
        # Save settings using the Chrome extension storage API. Try sync, fallback to local
            window.chrome.storage.sync.set { settings: settings }, () ->
                if chrome.runtime.lastError && chrome.runtime.lastError.message && chrome.runtime.lastError.message.indexOf( 'MAX_WRITE_OPERATIONS_PER_HOUR' ) != -1
                    window.chrome.storage.local.set { settings: settings }, () ->
                        paGenSettings = settings

                        if notify
                            showNotification window.chrome.i18n.getMessage( 'settingsSaved' )

                        applySettings()

                        true
                else
                    paGenSettings = settings

                    if notify
                        showNotification window.chrome.i18n.getMessage( 'settingsSaved' )

                    applySettings()

                    true
    true
    else
        false

# Function: Get Settings
getSettings = () ->
    # Get settings using the Chrome extension storage API. Try sync, fallback to local
    window.chrome.storage.sync.get 'settings', (items) ->
        if items.settings
            settings = extend( paGenSettings, items.settings)

            if validateSettings settings, false
                paGenSettings = settings

                applySettings()
            true
        else
            window.chrome.storage.local.get 'settings', (items) ->
                if items.settings
                    settings = extend( paGenSettings, items.settings)

                    if validateSettings settings, false
                        paGenSettings = settings
                applySettings()
            true

調べてみると、設定を保存するか、パスワードを生成すると (設定も保存されます)、次のエラーが表示されます。

storage.set 中のエラー: QUOTA_BYTES_PER_ITEM クォータを超えました。

ローカル ストレージにフォールバックしましたが、設定を同期させたいと思っています。

したがって、これがうまくいかない場合は、get/set コードを変更して、オブジェクトの代わりに、設定ごとに異なるキー/値を使用するようにしますが、この同期機能はあまり意味がないと思います。オブジェクトをサポートするために宣伝されている (そしてこれは小さい) ので、何か間違ったことをしているだけだと思っています。

ありがとうございました!

4

1 に答える 1

3

それで整理しました。

主な問題は、保存するchrome.storage ( https://developer.chrome.com/extensions/storage.html#event-onChanged )のonChangedリスナーが原因で発生した「無限ループ」 (n00b) でした。変更が検出されるたびに設定を変更します。

ドキュメントを十分に注意深く読んでおらず、これは、たとえば同期からの設定の変更を「リッスン」することであると考えました (ただし、変更はリッスンします)。同期から設定を取得できるため、私もそれを必要としません。

そのリスナーを削除すると、問題が修正されました。

私が知る限り、拡張機能の新しいバージョン (1.0.4) にはバグがありません。

于 2013-01-04T18:41:28.223 に答える