检测哪个标签/窗口在谷歌浏览器中被聚焦

Detect which tab/window is being focused in Google Chrome

本文关键字:谷歌浏览器 聚焦 窗口 标签 检测      更新时间:2023-09-26

我正在制作一个Chrome扩展程序,其中包含一个执行以下操作的内容脚本:

  • 内容脚本注入到每个页面中
  • 每 5 秒定期调用函数"a"
  • 如果页面处于焦点中,则调用函数"B"。

理想情况下,应为每个选项卡调用函数"a",但仅针对聚焦的选项卡调用函数"b"。

我已经研究了几种方法,我发现的最接近的解决方案是:如何使用Javascript检测标签页何时在Chrome中聚焦?

但是,当我尝试使用outerHeight/innerHeight方法时,它给了我一些非常奇怪的结果。当窗口失焦时,我得到 0 表示外高。这对我来说似乎更像是一个错误,所以我不确定我是否可以使用它来确定选项卡是否失焦。

有没有人对此有很好的解决方案?

不知道只有内容脚本的解决方案,但这可以在后台页面的帮助下轻松完成:

content_script.js:

function task() {
    chrome.extension.sendRequest("is_selected", function(isSelected) {
        if(isSelected) {
            //this tab in focus
        } else {
            //not in focus
        }
    });
}
setInterval(task, 5000);

背景.html:

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    if(request == "is_selected") {
        chrome.tabs.getSelected(null, function(tab){
            if(tab.id == sender.tab.id) {
                sendResponse(true); //in focus (selected)
            } else {
                sendResponse(false);    //not in focus
            }
        });
    }
});