2015-09-20 76 views
1

我无法使用我的Chrome扩展程序正确保存数据。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++) { 
 
\t \t var pair = vars[i].split("="); 
 
     if(pair[0] == variable){return pair[1];} 
 
    } 
 
    return(false); 
 
} 
 

 

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

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

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

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

 

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

在saveTicket2日志工作正常

Saved 222222 text 

内使用setData日志记录一个空对象

因此Chrome .storage.local.s et似乎没有错误地通过,但它实际上并没有保存任何东西。

Chrome Storage Developer Page给出的示例如下

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

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

如果我将以下内容添加到saveTicket2,在.set之后,它也返回一个空对象,确认我要么访问它,要么保存它错误。

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

有谁知道这是为什么不节约?

+0

顺便说一句,代码片段对Chrome扩展没有意义,因为代码片段无法在浏览器中运行。 – Teepeemm

回答

0

在您的代码:

chrome.storage.local.set({ticket : contents}, function() { 
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 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?