Chrome 未设置本地存储
Chrome not setting local storage
我正在创建一个 Chrome 打包应用程序。我想在用户第一次打开应用程序时显示 EULA。我想用我们Chrome的本地存储来测试应用程序是否已经打开。
这是我的 javascript:
function disagree(){
chrome.storage.local.set({eula:'false'}, function(result) {
console.log(result.eula)});
// console.log returns undefined
// Returns: TypeError: Cannot read property 'eula' of undefined
document.getElementById("eulaDisagree").style.display = "block";
}
function agree(){
chrome.storage.local.set({eula:'true'}, function(result) {
console.log("Set eula: " + result.eula);
// console.log returns undefined
// Returns: TypeError: Cannot read property 'eula' of undefined
chrome.storage.local.get("eula"), function(result){
console.log("Get Result: " + result.eula)};
// Returns this error: extensions::uncaught_exception_handler:8 Error in response to
// storage.set: Error: Invocation of form get(string) doesn't match definition
// get(optional string or array or object keys, function callback)
});
document.getElementById("background").style.height = "0%";
document.getElementById("foreground").style.height = "0%";
document.getElementById("foreground").style.border = "none";
}
// Creates event listeners
document.addEventListener('DOMContentLoaded', function(){
document.getElementById("disagree").addEventListener("click", function(){
disagree();
});
document.getElementById("agree").addEventListener("click", function(){
agree();
});
});
问题是 Chrome 没有将数据存储到本地存储。
我认为问题出在两个小错误上。
设置键值对时相信
chrome.storage.local.set({eula:'false'}, function() {});
eula 应该是一个字符串 {'eula': 'false'}
这可能是它没有首先设置的原因。
它是console.logging未定义的原因是因为 set 不会将结果参数发送到回调函数,只有在 get 方法中才会发生。
如果将 eula 设置为字符串将设置存储对象,那么您的 get 方法应该停止抛出错误。
您没有正确使用 chrome.storage
api。看一下 StorageArea.get
和 StorageArea.set
api.
的定义
StorageArea.set(object items, function callback)
。回调函数没有参数
StorageArea.get(string or array of string or object keys, function callback)
,你应该把回调作为参数。
所以示例用法如下:
chrome.storage.local.set({ eula: true });
chrome.storage.local.get('eula', function (results) {
console.log(results.eula);
});
看来我的 get
语法有误。我将 javascript 更改为以下内容:
function disagree(){
chrome.storage.local.set({'eula':'false'}, function() {
console.log("False")});
document.getElementById("eulaDisagree").style.display = "block";
}
function agree(){
chrome.storage.local.set({'eula':'true'}, function() {
var eulaV;
console.log("True");
chrome.storage.local.get('eula', function(result){
eulaV = result.eula;
console.log(eulaV);
});
});
document.getElementById("background").style.height = "0%";
document.getElementById("foreground").style.height = "0%";
document.getElementById("foreground").style.border = "none";
}
我不再收到任何错误。一切正常。
我正在创建一个 Chrome 打包应用程序。我想在用户第一次打开应用程序时显示 EULA。我想用我们Chrome的本地存储来测试应用程序是否已经打开。
这是我的 javascript:
function disagree(){
chrome.storage.local.set({eula:'false'}, function(result) {
console.log(result.eula)});
// console.log returns undefined
// Returns: TypeError: Cannot read property 'eula' of undefined
document.getElementById("eulaDisagree").style.display = "block";
}
function agree(){
chrome.storage.local.set({eula:'true'}, function(result) {
console.log("Set eula: " + result.eula);
// console.log returns undefined
// Returns: TypeError: Cannot read property 'eula' of undefined
chrome.storage.local.get("eula"), function(result){
console.log("Get Result: " + result.eula)};
// Returns this error: extensions::uncaught_exception_handler:8 Error in response to
// storage.set: Error: Invocation of form get(string) doesn't match definition
// get(optional string or array or object keys, function callback)
});
document.getElementById("background").style.height = "0%";
document.getElementById("foreground").style.height = "0%";
document.getElementById("foreground").style.border = "none";
}
// Creates event listeners
document.addEventListener('DOMContentLoaded', function(){
document.getElementById("disagree").addEventListener("click", function(){
disagree();
});
document.getElementById("agree").addEventListener("click", function(){
agree();
});
});
问题是 Chrome 没有将数据存储到本地存储。
我认为问题出在两个小错误上。
设置键值对时相信
chrome.storage.local.set({eula:'false'}, function() {});
eula 应该是一个字符串 {'eula': 'false'} 这可能是它没有首先设置的原因。
它是console.logging未定义的原因是因为 set 不会将结果参数发送到回调函数,只有在 get 方法中才会发生。
如果将 eula 设置为字符串将设置存储对象,那么您的 get 方法应该停止抛出错误。
您没有正确使用 chrome.storage
api。看一下 StorageArea.get
和 StorageArea.set
api.
StorageArea.set(object items, function callback)
。回调函数没有参数StorageArea.get(string or array of string or object keys, function callback)
,你应该把回调作为参数。
所以示例用法如下:
chrome.storage.local.set({ eula: true });
chrome.storage.local.get('eula', function (results) {
console.log(results.eula);
});
看来我的 get
语法有误。我将 javascript 更改为以下内容:
function disagree(){
chrome.storage.local.set({'eula':'false'}, function() {
console.log("False")});
document.getElementById("eulaDisagree").style.display = "block";
}
function agree(){
chrome.storage.local.set({'eula':'true'}, function() {
var eulaV;
console.log("True");
chrome.storage.local.get('eula', function(result){
eulaV = result.eula;
console.log(eulaV);
});
});
document.getElementById("background").style.height = "0%";
document.getElementById("foreground").style.height = "0%";
document.getElementById("foreground").style.border = "none";
}
我不再收到任何错误。一切正常。