Javascript 如何将当前窗口选项卡数组中的状态设置为活动选项卡?

Javascript 如何将当前窗口选项卡数组中的状态设置为活动选项卡?,javascript,node.js,reactjs,google-chrome,google-chrome-extension,Javascript,Node.js,Reactjs,Google Chrome,Google Chrome Extension,我有一个Chrome扩展,它显示当前活动选项卡的链接预览,但是当打开它时,当然会延迟渲染,因为它正在调用API。我想抓取所有当前的窗口选项卡URL,并预渲染链接预览以准备就绪,并且仅在扩展打开时显示活动选项卡 constructor(props) { super(props); this.state = { itemURL: 'https://www.getpennywise.io' }; } componentDidMount() { chr

我有一个Chrome扩展,它显示当前活动选项卡的链接预览,但是当打开它时,当然会延迟渲染,因为它正在调用API。我想抓取所有当前的窗口选项卡URL,并预渲染链接预览以准备就绪,并且仅在扩展打开时显示活动选项卡

constructor(props) {
    super(props);
    this.state = {
        itemURL: 'https://www.getpennywise.io'
    };
}


componentDidMount() {
    chrome.tabs.query({ currentWindow: true }, tabs => {
        let OpenTabs = [];
        for (let i = 0; i < tabs.length; i++) {
            const itemURL = new URL(tabs[i].url);
            OpenTabs.push(itemURL);
        }
        // this.setState({
        //     itemURL: itemURL,
        console.log(OpenTabs);
    });
};

render() {
    return (
        <MicrolinkCard
            url={this.state.itemURL}
            size='large'
            contrast='true'
        />
    )
}
构造函数(道具){
超级(道具);
此.state={
项目URL:'https://www.getpennywise.io'
};
}
componentDidMount(){
chrome.tabs.query({currentWindow:true},tabs=>{
让OpenTabs=[];
for(设i=0;i

我可以让它在active tab=true和settings itemURL to tabs[0]中工作,但我正在尝试避免延迟。

chrome.*API是异步的,因此总是会有延迟

查询
中声明的脚本中的选项卡,以便更快地获得结果:

popup.html


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
});
另一个解决方法是始终通过API中的各种事件跟踪后台脚本中的选项卡活动,并将JSON.stringify(结果)保存在HTML5 localStorage中,该存储是同步的,因此在弹出窗口开始时可用