chrome. * API является асинхронным, поэтому всегда будет задержка.
Запросите вкладки в скрипте, объявленном внутри <head>
, чтобы результаты были доступны раньше:
popup.html
<head>
<script src="popup.js"></script>
<!-- other scripts
<script src="script1.js"></script>
<script src="script2.js"></script>
-->
</head>
popup.js
let tabs;
chrome.tabs.query({currentWindow: true}, tabs_ => {
tabs = tabs_;
window.dispatchEvent(new Event('gotTabs'));
});
Promise.all([
new Promise(resolve =>
window.addEventListener('gotTabs', resolve, {once: true})),
new Promise(resolve =>
document.addEventListener('DOMContentLoaded', resolve, {once: true})),
]).then(() => {
// create component here using 'tabs' variable
});
Другой обходной путь - всегда отслеживать активность вкладок в фоновом скрипте с помощью различных событийв chrome.tabs API и сохраните JSON.stringify (результаты) в HTML5 localStorage, который является синхронным, поэтому он будет доступен при запуске всплывающего окна.