Chrome App localStorage未保留且chrome.storage无效

时间:2015-11-25 20:16:23

标签: javascript webview local-storage google-chrome-app

我有一个镀铬自助服务终端应用程序,我需要在机器开启和关闭之间保存数据(几个字节作为字符串)。 但是,无论我尝试什么,localStorage似乎都会在重启时被抹掉。

当我转到chrome:// inspect / #apps来检查Chrome应用时,控制台中没有与LocalStorage相关的错误

在浏览器的Chrome中,我只会使用localStorage,但在使用Kiosk App时,这种情况不会持续存在。

代码示例:

window.localStorage.setItem(id, temp);
window.localStorage.getItem(id);

遵循以下建议: Persist data across single app kiosk mode executions 我有一个Chrome管理许可证,其中设置了以下设置,但这似乎没有任何区别(请参阅随附的JPG)

使用Kiosk App,我在manifest.json

中拥有存储权限

我尝试过移动到chrome.storage,但是当我尝试执行此操作时出现未定义的错误。在Chrome应用程序和浏览器中运行时会出现此错误

我在这里尝试了解决方案,但它们不起作用。总是得到一个未定义的错误: https://groups.google.com/a/chromium.org/forum/#!topic/chromium-apps/_YcOT4PcdAQ

Chrome Management Settings

从评论中添加:代码:

chrome.storage.local.set({ 'key1': 'first', 'key2': 'second', 'key3': 'third', 'key4': 'fourth', 'key5': 'fifth' }, function() { console.debug('Settings saved'); });

<body class="trim full">
  <form id="kiosk" model="AppConfig" view="KioskView">
    <webview id="browser" src="link-to-my-website-which-calls-localstorage.com" style="width:100%; height:100%; position:absolute; top:0; left:0; right:0; bottom:0;"></webview>
  </form>
</body>

1 个答案:

答案 0 :(得分:8)

Chrome应用中有两种localStorage上下文。

  1. 应用程序的代码本身。 localStoragedisabled for Chrome App code。唯一的解决方案是使用chrome.storage API。

  2. localStorage
  3. (您的情况) <webview>。它默认设置为临时 。如果您希望它继续存在,则需要使用webview persistent partition

      

    如果存储分区ID以persist:partition="persist:googlepluswidgets")开头,则webview将使用应用中具有相同存储分区ID的所有guest虚拟机可用的永久存储分区。如果未设置ID或没有'persist:'前缀,则webview将使用内存存储分区。

    <webview id="browser"
             src="link-to-my-website-which-calls-localstorage.com"
             style="width:100%; height:100%; position:absolute; top:0; left:0; right:0; bottom:0;"
             partition="persist:browser">
    </webview>
    

    请注意,chrome.storage API不会向webview内容公开(除非您注入脚本)。