我有一个chrome扩展弹出窗口,用户可以在其中键入要关注的子目录。 https://imgur.com/a/vjw2rMm
标签将保存为数组。但是,一旦关闭弹出窗口并重新打开,该数组将恢复为空。
如何保存它,以便在重新打开它时,该字段将由保存的数组填充?
我尝试过的事情: 我尝试了“ localstorage”,但是它不起作用,并且与“ reddit.push”混淆了。
未捕获的TypeError:reddits.push不是函数
如果没有saveList函数,则可以将数组压入并拼接良好。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Simple Chrome Extension</title>
<link rel="stylesheet" type="text/css" media="screen" href="css/bootstrap-tagsinput.css">
</head>
<body>
<div class="inputContainer">
<input type="text" id="Tags" class="form-control"/>
</div>
<script src="jquery-3.3.1.min.js"></script>
<script src="bootstrap-tagsinput.js"></script>
<script type="text/javascript" src="js/popup.js"></script>
</body>
</html>
javascript
$('#Tags').tagsinput({
confirmKeys: [13, 32, 44]
});
$('input').on('itemAdded', function(event) {
reddits.push(event.item);
console.log(reddits);
saveList();
});
$('input').on('itemRemoved', function(event) {
reddits.splice(reddits.indexOf(event.item), 1);
console.log(reddits);
saveList();
});
function saveList() {
localStorage.setItem('redditList', reddits);
reddits = localStorage.getItem('redditList');
}
var reddits = [];
答案 0 :(得分:1)
您需要在使用变量之前声明它们。
此外,localStorage仅存储字符串值。使用JSON.stringify()
将数组和对象转换为字符串,然后使用JSON.parse()
将它们转换回字符串。
var reddits = []; // declare before using
var exists = localStorage.getItem('redditList');
if(exists) {
reddits = JSON.parse( exists );
}
$('#Tags').tagsinput({
confirmKeys: [13, 32, 44]
});
$('input').on('itemAdded', function(event) {
reddits.push(event.item);
console.log(reddits);
saveList();
});
$('input').on('itemRemoved', function(event) {
reddits.splice(reddits.indexOf(event.item), 1);
console.log(reddits);
saveList();
});
function saveList() {
localStorage.setItem('redditList', JSON.stringify(reddits)); // store it as string
reddits = JSON.parse( localStorage.getItem('redditList')); // convert it to object
}