【问题标题】:Chrome Extension - Not saving dataChrome 扩展程序 - 不保存数据
【发布时间】:2015-09-20 21:11:07
【问题描述】:

我的 Chrome 扩展程序无法正确保存数据。

这是我当前的代码

function getQueryVariable(variable) {
//Split URL by variables
    var query = window.location.search.substring(1);
    var vars = query.split("&");
    for (var i=0;i<vars.length;i++) {
		var pair = vars[i].split("=");
        if(pair[0] == variable){return pair[1];}
    }
    return(false);
}


function saveTicket2(ticket, contents) {
//Save the data to local storage
	chrome.storage.local.set({ticket : contents}, function() {
	console.log('Saved', ticket, contents);
	});
}

function setData(ticketID, result) {
//If data exists. Set it.
	document.getElementsByName('message')[0].value = result[ticketID];
	document.getElementsByName('message')[1].value = result[ticketID];
	console.log(result);
}

//Grab Ticket ID	
var ticketID = getQueryVariable("id");

//Retrieve data if it exists
try  {
	chrome.storage.local.get(ticketID, function(result) {
	if (result) {
	setData(ticketID, result);
	}
	});
} catch(err) {
	console.log(err.message);
}


//Save ticket contents to local storage every 5 seconds
window.setInterval(function() {
	var contents= document.getElementsByName('message')[0].value;
	var contents= document.getElementsByName('message')[1].value;
	saveTicket2(ticketID, contents);
}, 5000);

在 saveTicket2 中,日志工作正常

Saved 222222 text

setData 中的日志记录一个空对象

所以 chrome.storage.local.set 似乎没有错误地通过,但实际上并没有保存任何东西。

来自Chrome Storage Developer Page的例子如下

chrome.storage.sync.set({'value': theValue}, function() {
  // Notify that we saved.
  message('Settings saved');
});

这是我所拥有的。存储权限也在我的清单中。

如果我在 saveTicket2 中添加以下内容,在 .set 之后它还会返回一个空对象,确认我访问错误或保存错误。

	chrome.storage.local.get(ticket, function(result1) {
	console.log(result1);
	});

有人知道为什么这不能保存吗?

【问题讨论】:

  • 顺便说一句,代码 sn-ps 对 chrome 扩展没有意义,因为 sn-p 无法在浏览器中运行。

标签: javascript google-chrome google-chrome-extension


【解决方案1】:

在您的代码中:

chrome.storage.local.set({ticket : contents}, function() {
console.log('Saved', ticket, contents);
});

ticket的值没有设置成功。

它将以这种方式工作:

function saveTicket2(ticket, contents) {
//Save the data to local storage
var dataObj = {};
dataObj[ticketID] = contents;
chrome.storage.local.set(dataObj, function(){
    if(!chrome.runtime.lastError){
        console.log('Saved', ticket, contents);
    }   
});
}

这是我的测试代码:

function saveTicket2(ticket, contents) {
//Save the data to local storage
var dataObj = {};
dataObj[ticketID] = contents;
chrome.storage.local.set(dataObj, function(){
    if(!chrome.runtime.lastError){
        console.log('Saved', ticket, contents);
    }   
});}

function setData(ticketID, result) {
//If data exists. Set it.
console.log("setData: ", result);
}

//Grab Ticket ID    
var ticketID = "55555";

//Retrieve data if it exists
function getData(){
try{
    chrome.storage.local.get(ticketID, function(result) {
        if (result){
            console.log(result);            
            setData(ticketID, result[ticketID]);
        }
    });
}catch(err) {
    console.log(err.message);
}
}

//Save ticket contents to local storage every 5 seconds
window.setInterval(function() {
var contents= new Date().getTime();
saveTicket2(ticketID, contents);
}, 3000);
window.setInterval(function() {
getData();
}, 5000);

如果您想了解更多关于 chrome.storage 的使用方法,请前往How to set a simple dynamic variable into chrome.storage.local.set for a chrome extension?

【讨论】:

  • 有人能告诉我如何将数据推送到数组中并保存该数组以便能够将新值添加到该数组中...... ..........
猜你喜欢
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 2011-02-17
  • 2023-03-26
  • 1970-01-01
相关资源
最近更新 更多