gpt4 book ai didi

javascript - 如何将当前窗口选项卡数组中的状态设置为事件选项卡?

转载 作者:行者123 更新时间:2023-12-02 23:42:47 25 4
gpt4 key购买 nike

我有一个 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'
/>
)
}

我能够让它在 active tab = true 和将 itemURL 设置为 tabs[0] 的情况下工作,但我试图避免延迟。

最佳答案

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 中,这是同步的,因此它将在弹出窗口启动时可用。

关于javascript - 如何将当前窗口选项卡数组中的状态设置为事件选项卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55995767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com