2015-09-20 75 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?