Javascript 无法将json保存回chrome扩展中
我正在尝试为Twitch创建一个chrome扩展,我面临一个小问题,我不知道如何解决。我必须说我的javascript知识不是最好的(我是一名C#开发人员),这次连谷歌都帮不了我(可能是因为我不知道正确的搜索词) 因此,我们必须解决这个问题。此扩展的目标是在直播期间当拖缆更改游戏时通知您。我想只通知用户一次,每个游戏的变化。我有一个包含对象的数组,这个对象是一个带有一些属性的Javascript 无法将json保存回chrome扩展中,javascript,json,google-chrome-extension,Javascript,Json,Google Chrome Extension,我正在尝试为Twitch创建一个chrome扩展,我面临一个小问题,我不知道如何解决。我必须说我的javascript知识不是最好的(我是一名C#开发人员),这次连谷歌都帮不了我(可能是因为我不知道正确的搜索词) 因此,我们必须解决这个问题。此扩展的目标是在直播期间当拖缆更改游戏时通知您。我想只通知用户一次,每个游戏的变化。我有一个包含对象的数组,这个对象是一个带有一些属性的类,其中一个属性是游戏。然后将该数组解析为json字符串,保存在浏览器localstorage中。下面是我用来检查拖缆正在
类
,其中一个属性是游戏
。然后将该数组解析为json字符串,保存在浏览器localstorage
中。下面是我用来检查拖缆正在玩什么游戏并试图将属性game
设置为该值的代码。然后将数组解析回json字符串,并设置localstorage
function checkPlaying() {
var twitchUsers = JSON.parse(localStorage.twitchUsers);
if (twitchUsers.length > 0) {
var f = (function () {
var xhr = [];
for (i = 0; i < twitchUsers.length; i++) {
(function (i) {
if (twitchUsers[i].isOnline) {
xhr[i] = new XMLHttpRequest();
xhr[i].open('GET', REQUEST_BASE + REQUEST_CHANNELS + twitchUsers[i].id, true);
xhr[i].setRequestHeader('Accept', 'application/vnd.twitchtv.v5+json')
xhr[i].setRequestHeader('Client-ID', CLIENT_ID)
xhr[i].onreadystatechange = function () {
if (xhr[i].readyState == 4 && xhr[i].status == 200) {
var response = JSON.parse(xhr[i].responseText);
var currentGame = response.game;
if (twitchUsers[i].game != currentGame) {
twitchUsers[i].game = currentGame;
if (twitchUsers[i].notify) {
browser.notifications.create({
"type": "basic",
"iconUrl": twitchUsers[i].logo,
"title": "TwitchWatcher",
"message": twitchUsers[i].name + ' is currently playing ' + twitchUsers[i].game
});
}
}
}
};
xhr[i].send();
}
localStorage.twitchUsers = JSON.stringify(twitchUsers);
})(i);
}
})();
}
}
函数校验(){
var twitchUsers=JSON.parse(localStorage.twitchUsers);
如果(twitchUsers.length>0){
var f=(函数(){
var xhr=[];
对于(i=0;i
问题是,localStorage.twitchUsers
从未获得新值,这导致扩展不断用相同的游戏通知用户
我试图更改localStorage.twitchUsers=JSON.stringify(twitchUsers)的位置
到for循环的内部
和f
变量的外部,但我没有成功
有人知道我做错了什么吗
谢谢。使用
localStorage.setItem(“twitchUsers”,JSON.stringify(twitchUsers))
和twitchUsers=JSON.parse(localStorage.getItem(“twitchUsers”)代码>-显然要做一些错误检查,但这应该会有帮助->@Archer谢谢,它对Chrome做了一些检查,但对Firefox没有。我想有一种不同的方式来保存使用firefox?!您不用等待异步XHR完成就可以保存到存储中。@wOxxOm我也这么认为,在C#中,要等待异步方法,我会使用async关键字,但如何在Javascript中执行?简而言之,您可以找到许多示例:承诺。