Google Chrome扩展程序的storage.sync上的QUOTA_BYTES_PER_ITEM错误

时间:2012-12-26 19:30:24

标签: javascript google-chrome google-chrome-extension sync

tl; dr:有关QUOTA_BYTES_PER_ITEM的同步错误,但我的项目很小,需要帮助找出问题所在。

所以我在Google Chrome扩展程序上收到此错误,我认为它没有多大意义,因为我要保存的内容不会超过400字节(序列化,大于在JSON字符串中相同),并且考虑QUOTA_BYTES_PER_ITEM4096,它远非那个限制。

要么我在计算错误的东西(最有可能),要么我做错了什么(不太可能!)。

您可以看到我的扩展程序的code,并从web store

安装

对此问题很重要的部分如下(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代码,为每个设置使用不同的键/值,而不是对象,但我认为这没有多大意义,因为这个同步功能被宣传为支持对象(而且这个很小),所以我希望我做错了。

谢谢!

1 个答案:

答案 0 :(得分:2)

所以我把它整理出来了。

主要问题是“无限循环”(n00b)我因 onChanged 侦听 chrome.storage ({{ 3}}),每次检测到更改时我都会保存设置。

我没有仔细阅读文档,并且认为这是为了“监听”设置的更改,例如,来自同步(但它会监听任何更改),因为我可以获取设置来自同步,我甚至不需要它。

删除该侦听器解决了问题。

据我所知,新版本的扩展程序(1.0.4)没有错误。