#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