我正在尝试为Twitch创建一个chrome扩展,我正面临一个小问题,我无法弄清楚如何解决。我必须说我的javascript知识不是最好的(我是C#开发人员),这次甚至谷歌都不能帮助我(也许是因为我不知道正确的搜索条件)。
所以问题。此扩展程序的目标是在直播期间流媒体更改游戏时通知您。我想在每场比赛改变时通知用户一次。我有一个包含对象的数组,这个对象是一个带有一些属性的class
,其中一个属性是game
。然后将此数组解析为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);
}
})();
}
}
问题是localStorage.twitchUsers
永远不会获得新值,这会导致扩展程序继续通知用户使用相同的游戏。
我尝试将localStorage.twitchUsers = JSON.stringify(twitchUsers);
的位置更改为for loop
内部和f
变量的外部,但我没有成功。
有谁知道我做错了什么?
谢谢。