javascript - 如何确定 Chrome 窗口是否通过 Chrome 扩展程序最小化

标签 javascript google-chrome dom google-chrome-extension

我正在编写一个 Chrome 扩展程序,想要确定 Chrome 窗口是否已最小化。在搜索 stackoverflow.com 时,我找到了以下解决方案,但它对我不起作用,并且出现错误: Error in response to windows.get: TypeError: undefined is not a function at chrome-extension://..... .

我的background.js中有以下代码

chrome.windows.onFocusChanged.addListener(function(windowId) {
    if (windowId === -1) {
         console.window("Minimized");
    } else {
        chrome.windows.get(windowId, function(chromeWindow) {
            if (chromeWindow.state === "minimized") {
                console.window("Minimized");
            } else {
                console.window("NOT Minimized");
            }
        });
    }
});

我是否应该在 list 中添加任何特殊权限才能使上述代码正常工作?非常感谢任何帮助。

最佳答案

你的问题几乎很明显:你在#3、#7和#9行做什么?没有这样的 console.window() 函数...这就是您收到该错误的原因:因为对象 console 的属性 window显然是未定义的。您似乎正在尝试记录一些信息,但使用了错误的函数。 你想要的是console.log()

正确的代码如下:

chrome.windows.onFocusChanged.addListener(function(windowId) {
    if (windowId === -1) {
         console.log("Minimized");
    } else {
        chrome.windows.get(windowId, function(chromeWindow) {
            if (chromeWindow.state === "minimized") {
                console.log("Minimized");
            } else {
                console.log("NOT Minimized");
            }
        });
    }
});

另外,引用文档:

When requested, a windows.Window will contain an array of tabs.Tab objects. You must declare the "tabs" permission in your manifest if you require access to the url, title, or favIconUrl properties of tabs.Tab.

因此,如果您还想访问 Windows 选项卡,则必须在 list 中添加权限:

...
"permissions": [
    "tabs", ...
],
...

注意:您永远不会让它记录“最小化”,因为 onFocusChanged 事件仅在某些窗口获得焦点时才会触发,而不是失去焦点时。如果您想查看是否有任何窗口最小化,则必须使用 chrome.windows.getAll() 方法并迭代各个窗口以检查它们是否最小化。

<小时/>

附录:检查哪些窗口被最小化:

function doSomethingWithMinimizedWindows(windows) {
    for (var i = 0; i < windows.length; i++) {
        // do something with windows[i]
        // for example:
        console.log('Window #'+windows[i].id+' is minimized!');
    }
}

chrome.windows.getAll(function(windows) {
    var minimized = [];

    for (var i = 0; i < windows.length; i++) {
        if (windows[i].state === "minimized") {
            minimized.push(windows[i]);
        }
    }

    doSomethingWithMinimizedWindows(minimized);
});

上面的代码将生成如下内容:

 Window #378 is minimized!
 Window #457 is minimized!
 Window #460 is minimized!
 Window #463 is minimized!

关于javascript - 如何确定 Chrome 窗口是否通过 Chrome 扩展程序最小化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26412095/

相关文章:

javascript - 在 ReactJs 中更新组件更新时更新 jQuery slick carousel

google-chrome - 从内容脚本链接到选项页面

jquery - 为什么这个 div 在 Chrome 中加载不一致?错误?

html - 地址自动填充时如何更改输入字段样式

javascript - knockout 是否在已删除的虚拟元素内重新评估

javascript - 如何计算div类的费率?

javascript - 保存 Tensorflow.js 张量的先前值

javascript - 如果 JavaScript 有一流的函数,为什么在变量中调用这个函数不起作用?

javascript - Jquery .remove() 不更新 DOM

javascript - 使用 $(this) 访问 javascript 函数内 html 元素的属性会给出 undefined