能否增加一个获取所有标签url和id的功能?

功能建议 · 1690 次浏览
iamadsl 创建于 2024-05-04 20:29

我的浏览器经常打开几十个网页,想针对其中的特定网页做处理,就需要获取url做判断,然后通过相应的id激活并处理

尝试用gpt生成了一些获取所有id的代码,但不会返回数据。。。那个手动返回数据功能用不好,经常卡死,本来我就不太懂网页js的语法,下不去手改,以下是我查到的一些代码

如果实在不好实现,所有url和所有id,只获取其中一个也行

// 获取当前标签页的id
function getCurrentTabId() {
  return new Promise((resolve) => {
    chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
      resolve(tabs[0].id);
    });
  });
}

// 获取所有标签页的id
async function getAllTabIds() {
  const tabIds = [];
  const queryInfo = { windowType: 'normal' };

  (await new Promise((resolve) => {
    const callback = (tabs) => {
      for (const tab of tabs) {
        tabIds.push(tab.id);
      }
      resolve();
    };
    chrome.tabs.query(queryInfo, callback);
  }));

  return tabIds;
}

// 示例:获取所有标签页的id并打印
getAllTabIds().then((tabIds) => {
  console.log('所有标签页的id:', tabIds);
});

另外,抽空给连接浏览器的列表里加一个傲游Maxthon

还有,能不能加一个能切换到上一个/下一个标签页的功能?

iamadsl 最后更新于 2024/5/4

回复内容
CL 2024-05-04 22:32
#1

尽管我不太懂js,但是大概思路应该可以这样,

对所有tab,得到一个类似于 id和网址的对应词典 对象,然后通过浏览器控制里所说明的方法返回。 不过有这个也没法解决之前的非前台不响应问题。

参考动作:获取所有标签页 - by CL - 动作信息 - Quicker


所有对浏览器控制接口的开发都依赖于chrome的接口,所以maxthon需要兼容Chrome接口,而不是quicker去兼容它,因为没有什么办法去兼容它的。


iamadsl 回复 CL 2024-05-04 23:06 :

好好,非常感谢!只要能得到所有url和id,剩下的我就可以想办法解决了。

这次不是为了解决前台与否的问题,主要是想一次性过滤要处理的标签页,然后好执行相应的处理。非前台不响应(严格来说可能应该是,通过设置可以允许窗口被遮挡的情况下的后台运行,但不能是以前那样隐藏或最小化的后台)的问题已经放弃了,似乎是chrome更新什么安全机制导致的问题,如你所说,确实不是QK能解决的问题

CL 回复 iamadsl 2024-05-05 07:46 :

如果要返回标签页id-URL的词典,可以修改一下里面的js代码:
//.js 
chrome.tabs.query({}, function(tabs) {
    var tabInfo = {}; // 创建一个空对象用于存储id和url的映射
    tabs.forEach(function(tab) {
        tabInfo[tab.id] = tab.url; // 将每个标签页的id作为键,url作为值
    });
    sendReplyToQuicker(true, "ok", tabInfo, qk_msg_serial); // 发送包含id-url映射的对象
});


iamadsl 回复 CL 2024-05-05 10:04 :

感谢感谢,我先收藏了!

昨天说得到所有url和id就行了。。后来发现还是高估自己了,主要是不会处理json数组,后来用了个笨办法,raw转json后,删除前后的中括号,然后用split+regex转成列表,再用提取json完成的。。。

昨天把功能都理顺了,刚刚又继续研究了一下,正确的做法应该是用提取json模块,输出根对象为列表,这样就对了是吧?

回复主贴