无法将json保存在chrome扩展中

时间:2018-04-03 21:03:56

标签: javascript json google-chrome-extension

我正在尝试为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变量的外部,但我没有成功。

有谁知道我做错了什么?

谢谢。

0 个答案:

没有答案