【问题标题】:Create Parse sessions using Chrome storage not localstorage使用 Chrome 存储而不是本地存储创建 Parse 会话
【发布时间】:2015-10-31 07:03:59
【问题描述】:

我正在构建一个需要解析用户会话的 Chrome 扩展程序。因为 localstorage 是特定于域的,所以我需要使用 chrome.storage 以便在任何站点上都可以访问它。

当前 Parse Javascript SDK 使用 localstorage 来存储用户对象并创建会话。如何切换它以便 Parse 使用 chrome.storage?

这是我目前的想法:

on login
   store sessiontoken in chrome.storage

然后当我访问一个网站时:

if chrome.storage.sessiontoken
    create parse session with chrome.storage.sessiontoken

我想知道是否有人遇到过更简单的方法?

我很乐意这样做: window.localstorage = chrome.storage

但是想象一下这会导致问题。有人解决了吗?

【问题讨论】:

    标签: javascript google-chrome session parse-platform google-chrome-extension


    【解决方案1】:

    基本上你需要编写自己的存储控制器(当然是chrome api),然后让解析来使用它。

    由于这个帖子比较新,这里是详细的解决方案:

    Parse javascript SDK 默认使用window.localStorage api 来存储数据。 但是,在 Chrome 应用中,localStorage 被替换为 chrome.storage api,提供了更好的非阻塞存储解决方案。

    Parse SDK 实际上是为不同类型的存储(同步和异步)准备的,让您设置自己的自定义存储控制器

    正如 @andrewimm(来自 github) 指出的那样,您需要先致电 Parse.CoreManager.setStorageController(YOUR_STORAGE_CONTROLLER),然后再致电 Parse.initialize

    自定义存储控制的示例是 Parse React Native 存储控制器(也是异步的),可以在以下位置找到: https://github.com/ParsePlatform/Parse-SDK-JS/blob/master/src/StorageController.react-native.js

    • 同步控制器对象需要将其async 属性设置为0,并具有 getItem, setItem,removeItem, and clear 功能实现
    • Async 控制器对象需要将async 属性设置为1,并具有getItemAsync, setItemAsync,removeItemAsync,clear实现

    你需要做的就是按照 react native 的例子,构建你自己的存储控制器(使用 chrome storage api),让 Parse 使用它而不是使用localStorage p>

    Github 原问题帖:https://github.com/ParsePlatform/Parse-SDK-JS/issues/72

    【讨论】:

    • 我会复制更多的答案;这是完全合理的。
    【解决方案2】:

    你不能直接用chrome.storage替换localstorage,因为一个是同步的,一个不是,更不用说不同的API方法了。

    无论如何,您都无法将其包装成完全同步的。不过,这里有一些想法:

    1. 在后台脚本中使用存储。在那里,localStorage 的域是固定的。

    2. 制作存储的本地同步副本;像

      var localData = {};
      chrome.storage.local.get(null, function(data) {
        localData = data;
        doSomethingElse(); // Mind that this is async
      })
      

      但是,保存这个缓存会是个问题。您必须拦截写入并将其提交给 chrome.storage 并同样在 onChanged 事件上更新它 - 但所有这些都将是异步的,这可能不起作用。

    简而言之,如果一个库在内部使用localStorage,如果不重写库或将其保留在后台,您将无法充分替换它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-30
      • 2020-12-26
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      相关资源
      最近更新 更多