【问题标题】:Get number of tabs opened with Bulk URL Opener using AutoHotkey使用 AutoHotkey 获取使用 Bulk URL Opener 打开的选项卡数量
【发布时间】:2021-12-09 17:15:33
【问题描述】:

我在 Chrome 中使用了一个扩展程序(批量 URL 打开器)。此扩展以秒为间隔打开多个链接。它还会打开一个包含播放和暂停按钮的新标签页 (x1)。按下播放按钮时,扩展程序开始向右打开新标签并继续打开。按下暂停按钮时,它会停止打开新标签页。

我希望 AutoHotkey 在这里做的是读取在 Chrome 中打开的标签数量。如果选项卡少于 10 个,那么我希望 AutoHotkey 向 x1 选项卡提供输入并开始打开新选项卡。另外,如果打开的选项卡数量超过 12,那么我希望 AutoHotkey 再次向 x1 选项卡提供输入并停止打开新选项卡。

基本上,我只想在 Chrome 中一次打开 10 或 12 个标签,如果我关闭一两个标签,我希望自动打开一个新标签。有什么方法可以实现吗?

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: javascript autohotkey


【解决方案1】:

阅读此来源:https://dev.to/dcodeyt/send-data-between-tabs-with-javascript-2oa

初始化通道的过程如下:

const channel = new BroadcastChannel("my-channel");

这是接收消息的方式:

channel.addEventListener("message", e => {
    console.log(e.data);
});

这是您可以发布消息的方式

channel.postMessage("Hello world");

现在,知道了所有这些,让我们看看

解决方案

如果您打开选项卡,您将为每个选项卡打开一些 URL。假设您可以控制您打开的页面的源代码,您可以执行以下操作:

  • 在主标签和打开的标签上初始化频道
  • 在主选项卡和打开的选项卡上创建 message 事件侦听器
  • 当您可能想要打开标签时,将消息发布到子标签并查看您收到了多少回复

例子

子事件监听器

const channel = new BroadcastChannel("my-channel");
channel.addEventListener("message", e => {
    if (e.data === "ping") channel.postMessage("pong");
});

主事件监听器

var pongCount = 0;
var pongLimit = 12;
const channel = new BroadcastChannel("my-channel");
channel.addEventListener("message", e => {
    if (e.data === "pong") pongCount++;
});

打勾

setInterval(function() {
    pongCount = 0;
    channel.postMessage("ping");
    setTimeout(function() {
        for (let pongIndex = pongCount + 1; pongIndex < pongLimit; pongIndex++) {
            //open a tab
        }
    }, 100);
}, 1000);

请注意,勾选代码需要在主选项卡中

编辑

似乎无法访问正在加载的页面。如果是这种情况,您可以实现一个代理应用程序,它将请求传输到目标页面以绕过 Chrome 的限制,并拥有您在源代码方面具有完全访问权限的包装页面,因此能够发送和接收消息.

也可以使用 chrome.tabs 扩展名,例如

chrome.tabs.query({windowType:'normal'}, function(tabs) {
    console.log('Number of open tabs in all normal browser windows:',tabs.length);
}); 

但为此,需要安装给定的扩展:https://developer.chrome.com/docs/extensions/reference/tabs/

【讨论】:

  • 我没有源代码!!。我基本上在做的是,我正在尝试使用 chrome 中的扩展打开多个链接。所有这些链接都在新标签中打开,但问题是它一直打开导致 chrome 滞后。所以我想一次只打开 10 或 12 个链接,其余的在关闭之前的选项卡后打开!!。希望你能理解
  • @BillyMiller 我理解你的问题陈述,但你打算收集的信息,即打开的标签,在某种程度上是私人信息。例如,为什么我作为用户会信任您的扩展程序打开的标签数量?所以我猜你将无法直接获得这些信息。例如,如果您正在编写一个网络爬虫并在 chrome 中运行它,那么您可以创建一个具有源代码的代理站点,并将请求传输到服务器端的目标。
  • @BillyMiller 同样,如果用户还打开了其他一些选项卡,则很难区分您的应用程序打开的选项卡和用户打开的选项卡。因此,为了区分这一点,您需要从标签中获得积极响应。
  • @BillyMiller 如果您可以说服您的用户安装更多扩展,chrome.tabs (developer.chrome.com/docs/extensions/reference/tabs) 可能会有所帮助。
  • @BillyMiller 我已在答案中添加了更多信息
猜你喜欢
  • 2018-03-07
  • 1970-01-01
  • 2018-11-09
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多