0

Я создаю расширение Chrome, которое требует сеансов пользователя Parse. Поскольку localstorage является доменом, мне нужно использовать chrome.storage, чтобы его можно было получить на любом сайте.Создание сеансов анализа с использованием хранилища Chrome не localstorage

В текущем SDK-файле Javascript используется 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

Но представьте себе, что приведет к проблемам. Кто-нибудь решил это?

ответ

3

В принципе, вам необходимо написать собственный контроллер хранения (с хроматическим приемом), а затем позволить синтаксическому анализу использовать его.

Поскольку эта нить новее, вот подробное решение:

По умолчанию Разобрать Javascript SDK использовать window.localStorage API для хранения данных. Однако в приложении Chrome localStorage заменяется на chrome.storage api, который предлагает лучшее неблокирующее решение для хранения.

Анализировать SDK фактически подготовлен для различных типов хранения (как синхронной и асинхронной), и пусть ваш набор свой собственный контроллер для хранения пользовательских

Как @andrewimm (от GitHub) указал, что вам нужно позвонить по телефону Parse.CoreManager.setStorageController(YOUR_STORAGE_CONTROLLER), прежде чем позвонить по телефону Parse.initialize.

приведен пример пользовательского хранения контролируемой является Анализировать React контроллер памяти Native (который также асинхронной), которые могут быть найдены в:https://github.com/ParsePlatform/Parse-SDK-JS/blob/master/src/StorageController.react-native.js

  • Синхроблок объект контроллера необходимо установить его свойство async к 0, и имеют getItem, setItem,removeItem, and clear функции реализованы
  • асинхронный объект контроллера необходимо установить async свойство 1, и имеют getItemAsync, setItemAsync,removeItemAsync,clear реализованы

Все, что вам нужно сделать, это следовать реагировать родной пример и построить себе свой собственный контроллер хранения (с API для хранения хром), и пусть Анализировать использовать его вместо использования localStorage

Оригинальный вопрос Github thread: https://github.com/ParsePlatform/Parse-SDK-JS/issues/72

+0

Я бы скопировал больше ответа; здесь это совершенно оправдано. – Xan

0

Вы не можете напрямую заменить localstorage на chrome.storage, так как один является синхронным, а другой нет, не говоря уже о различных методах 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 внутри, вы не сможете заменить его надлежащим образом, не переписывая библиотеку или держать его в фоновом режиме.

Смежные вопросы