Работает ли Parse.com JS работает как расширение Chrome

#javascript #jquery #backbone.js #google-chrome-extension #parse-platform

#javascript #jquery #backbone.js #google-chrome-extension #синтаксический анализ-платформа

Вопрос:

Я новичок как в Parse, так и в разработке расширений Chrome, поэтому это может быть довольно простой вопрос:

Я пытаюсь разработать расширение Chrome, которое считывает и записывает данные в Parse.com . Текущее приложение, которое у меня есть, довольно простое, и, хотя оно отлично работает в Chrome (как браузер), оно не работает как расширение Chrome. Есть идеи о чем-то, что я мог бы упустить из виду?

Гайки и болты:

У меня есть index.html это указывает на jquery.min.js , parse-1.2.18.min.js , myownscript.js

myownscript.js выглядит так:

 $(function() {

    Parse.$ = jQuery;

    Parse.initialize("OMITTED",
                   "OMITTED");


    var Users = Parse.Object.extend("Users");
    var users = new Users();


    $("button").click(function(){
        users.save({name: $("#name").val()}, {
            success: function(object) {
                $(".success").show();
            },
            error: function(model, error) {
                $(".error").show();
            }
        });
        users.save({email: $("#email").val()}); 
    });   
});
  

Комментарии:

1. Я не вижу никаких причин, по которым оно не должно работать как расширение Chrome. Возможно, это связано с упаковкой расширения?

2. Похоже, я перепутал приложение Chrome и расширение Chrome. Он запускается как расширение (скажем, всплывающее окно), но не будет запускаться как приложение. Я добавил » api.parse.com » для разрешений, но все еще безуспешно.

3. Какие ошибки вы получаете в консоли? Как отлаживать .

4. @abraham, спасибо за совет. Это сообщение об ошибке, которое я получаю от parse-1.2.18.min.js : «окно. localStorage недоступен в упакованных приложениях. Вместо этого используйте chrome.storage.local.» Похоже, исправить это в Parse будет непросто…

5. Не уверен, что window.sessionStorage также доступен в упакованных приложениях, но window.localStorage = window.sessionStorage; перед добавлением Parse может сработать.

Ответ №1:

Вам нужно вставить этот код перед инициализацией синтаксического анализа:

 function ChromeStorageController(){
    var store = {};//Object.create(null);
    store.async = 1;
    store.getItemAsync = function(path){
        var get = new Parse.Promise()
        chrome.storage.local.get(path,function(data){
                //careful here: get return a key,value pair but we only need the value
                get.resolve(data[path]);
        });
        return get;
    };
    store.setItemAsync = function(path,value){
        var set = new Parse.Promise()
        var item = Object.create(null);
        item[path] = value;
        chrome.storage.local.set(item, function(err){
            if(err){
                set.reject(err);
            }else{
                set.resolve(value);
            }
        });
        return set;
    };
    store.removeItemAsync = function(path){
        var remove = new Parse.Promise()
        chrome.storage.local.remove(path,function(err){
            if(err){
                remove.reject(err);
            }else{
                remove.resolve();
            }
        })
        return remove;
    };
    store.clear = function(){
        chrome.storage.local.clear();
    };
    return store;
}
Parse.CoreManager.setStorageController(ChromeStorageController())
  

Решение опубликовано здесь:
https://github.com/ParsePlatform/Parse-SDK-JS/issues/72

благодаря quorak