使用Chrome存储而不是本地存储创建解析会话

Create Parse sessions using Chrome storage not localstorage

本文关键字:存储 创建 会话 Chrome 使用      更新时间:2023-09-26

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

当前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

我想知道是否有人想出一个更简单的方法?

我想做的就是:窗口。Localstorage = chrome.storage

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

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

由于这个线程是较新的,下面是详细的解决方案:

默认情况下,Parse javascript SDK使用window.localStorage api存储数据。然而,在Chrome应用程序中,localStoragechrome.storage api取代,提供了更好的非阻塞存储解决方案。

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

正如@andrewimm(来自github)所指出的,在调用Parse.initialize之前需要调用Parse.CoreManager.setStorageController(YOUR_STORAGE_CONTROLLER)

一个自定义存储控制的例子是Parse React Native存储控制器(这也是async),可以在 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存储api),并让Parse使用它,而不是使用localStorage

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

你不能直接用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,如果不重写库或将其保留在后台,则无法充分替换它。