gpt4 book ai didi

javascript - 带有 Tab API 的 Chrome 扩展程序

转载 作者:行者123 更新时间:2023-12-02 18:42:11 27 4
gpt4 key购买 nike

我正在编写 Chrome 扩展程序,但在打开超过 5 个选项卡时遇到一些困难。这是源代码。

manifset.json

{
"manifest_version": 2,

"name": "Test",
"description": "testing this",
"version": "1.0",

"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": [
"bookmarks"
]
}

popup.html

<!doctype html>
<html>
<head>
<title>Testing</title>
<style>
body {
min-width: 357px;
overflow-x: hidden;
}

</style>
<script src="popup.js"></script>
</head>
<body>
</body>
</html>

popup.js

document.addEventListener('DOMContentLoaded', function () {
chrome.bookmarks.getTree(function (stuff){
traverseBookmarks(stuff[0].children[0].children);
});
});

function traverseBookmarks(bookmarkTreeNodes) {
for(var i=0;i<bookmarkTreeNodes.length;i++) {
var bookmark = document.createElement('a');

if(bookmarkTreeNodes[i].url){
bookmark.href = bookmarkTreeNodes[i].url;
bookmark.target = "_blank";
}
else{
(function(num) {
bookmark.addEventListener("click", function() {
addChildren(bookmarkTreeNodes[num].children, false );
})})(i);
document.body.appendChild(document.createElement("br"));
}
bookmark.innerHTML = bookmarkTreeNodes[i].title;
document.body.appendChild(bookmark);
document.body.appendChild(document.createElement("br"));

if(bookmarkTreeNodes[i].children) {
traverseBookmarks(bookmarkTreeNodes[i].children);
}
}
}

function addChildren(children) {
for(var i = 0; i < children.length; i++){
// will open each link in the current window
chrome.tabs.create({
url: children[i].url
});
}
}

目标是能够单击该文件夹(现在只是象征该文件夹的链接)并打开该文件夹内的所有链接。目前发生的情况是,我单击该文件夹的链接,它会打开前 5 个。为了获得某种形式的日志记录,我添加了:

var bookmark = document.createElement('a');
bookmark.innerHTML = children[i].title;
document.body.appendChild(bookmark);
document.body.appendChild(document.createElement("br"));

到 addChildren() 函数。它打印出每个 child 。我遇到的问题是,当我单击该文件夹时,它只打开前 5 个选项卡,然后我猜测焦点会离开弹出窗口,因此它不会完成。我在网上找不到其他任何可以帮助的东西

感谢任何帮助。如果我需要澄清任何事情,请告诉我。

最佳答案

我怀疑问题正如您所说,当您创建新选项卡时,默认情况下它是事件,因此弹出窗口会失去焦点并卸载。您可以通过以下两种方法之一解决此问题。您可以将 url 列表发送到后台页面,然后将其全部打开。这将起作用,因为打开选项卡时背景页面保持加载状态。

解决此问题的另一种可能更好的方法是创建将 active 属性设置为 false 的选项卡,然后在它们全部打开后切换到组中的第一个选项卡。代码:

function addChildren(children) {
for(var i = 0; i < children.length; i++){
chrome.tabs.create({
url: children[i].url,
active: false
});
}
// switch focus to first opened tab
chrome.tabs.query({url:children[0].url},function(tabs){
chrome.tabs.update(tabs[tabs.length-1].id,{active:true});
});
}

关于javascript - 带有 Tab API 的 Chrome 扩展程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16741485/

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