Расширение Chrome: доступ к длине массива, в котором хранятся объекты - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь получить доступ к длине array, в которой хранится objects. Когда я печатаю array на консоли, он просто отображает 1, когда внутри массива есть один object, и отображает undefined, когда я пытаюсь получить доступ к длине array.

В моем всплывающем окне есть текстовое поле, которое после ввода текста и нажатия клавиши ввода сохранит всю информацию из вкладок в текущем окне в storage. Информация сохраняется в object, а object добавляется в array в storage. Затем я создаю кнопки во всплывающем окне, основываясь на длине array.

РЕДАКТИРОВАТЬ: objectArr имеет тип number и groupObject имеет тип object. Прежде чем я нажимаю groupObject на objectArr, я могу получить доступ к objectArr's length, и я все еще могу получить доступ к objectArr's length после нажатия. Однако когда я действительно обновляю objectArr, objectArr становится number.

background.js

chrome.runtime.onInstalled.addListener(onInstall);

/* runs on installation of extension */
function onInstall()
{
    // objectArr will store the group objects
    var objectArr = new Array();
    chrome.storage.local.set({"objectArr": objectArr});
    // initializes groupCount to 0
    chrome.storage.local.set({"groupCount": 0});
}

function storeTabs(storeTabs)
{
    chrome.storage.local.get(["groupCount", "objectArr"], function(group)
    {
        // current count of groups
        var groupCount = group.groupCount;

        var promptUser = storeTabs;

        var groupObject = {};

        /* stores all of the tab's information into an object and then puts object into storage */
        chrome.tabs.query({currentWindow: true}, function(tabs)
        {
            /* gets each tab's name and url from an array of tabs and stores them into arrays */
            var tabNamesArr = [];
            var tabUrlsArr = [];
            var tabCount = 0;

            for (; tabCount < tabs.length; tabCount++)
            {
                tabNamesArr[tabCount] = tabs[tabCount].title;
                tabUrlsArr[tabCount] = tabs[tabCount].url;
            }

            /* initialize object content */
            var groupName = "groupName" + groupCount;
            groupObject[groupName] = promptUser;

            var tabNames = "tabNames" + groupCount;
            groupObject[tabNames] = tabNamesArr;

            var tabUrls = "tabUrls" + groupCount;
            groupObject[tabUrls] = tabUrlsArr;

            console.log("before push, group.objectArr.length: " + group.objectArr.length);
            var objectArr = group.objectArr.push(groupObject);
            console.log("after push, group.objectArr.length: " + group.objectArr.length);
            console.log("typeof group.objectArr: " + typeof group.objectArr);
            console.log("typeof group.objectArr.push(groupObject): " + typeof objectArr);

            // updates storage with new objectArr with groupObject
            chrome.storage.local.set({"objectArr": objectArr});

            /* prints everything in storage */
            chrome.storage.local.get(null, function(items) 
            {
                var allKeys = Object.keys(items);
                console.log("storage: " + allKeys);
            })

            /* prints objectArr and objectArr.length */
            chrome.storage.local.get("objectArr", function(group)
            {
                console.log("objectArr: " + group.objectArr);
                console.log("objectArr.length: " + group.objectArr.length);
            })

            // set-up for next group so last group isn't overwritten
            chrome.storage.local.set({"groupCount": (groupCount + 1)});
        })
    }
}

popup.js

document.addEventListener("DOMContentLoaded", function()
{
    var storeTabs = document.getElementById("storeTabs");
    storeTabs.addEventListener("keyup", function(enterKey)
    {
        if (enterKey.keyCode == 13)
        {
            // get text from text field
            var storeTabs = document.getElementById("storeTabs").value;

            chrome.extension.getBackgroundPage().storeTabs(storeTabs);
        }
    })
}


displayButtons();

/* Display buttons for popup */
function displayButtons()
{
    chrome.storage.local.get("objectArr", function(group)
    {
        var objectArr = group.objectArr;

        console.log("objectArr: " + group.objectArr);
        console.log("objectArr.length: " + objectArr.length);

        for (var i = 0; i < objectArr.length; i++)
        {
            getStorage(i);
        }
    })
}

фоновый скрипт консоли

before push, group.objectArr.length: 0
after push, group.objectArr.length: 1
typeof group.objectArr: object
typeof group.objectArr.push(groupObject): number
storage: groupCount,objectArr
objectArr: 1
objectArr.length: undefined

консоль всплывающих скриптов

objectArr: 1
objectArr.length: undefined

1 Ответ

0 голосов
/ 06 сентября 2018

Я думаю, что это неправильно.

        console.log("before push, group.objectArr.length: " + group.objectArr.length);
        // var objectArr = group.objectArr.push(groupObject); assinged 1...
        group.objectArr.push(groupObject);
        var objectArr = group.objectArr;
        console.log("after push, group.objectArr.length: " + group.objectArr.length);
        console.log("typeof group.objectArr: " + typeof group.objectArr);
        console.log("typeof group.objectArr.push(groupObject): " + typeof objectArr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...