Я пытаюсь получить доступ к длине 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