4

我想检测面板是否在 chrome 中启用,在 javascript 中。

目前,您可以使用以下代码创建面板:

chrome.windows.create({ url: "[url]", width: 500, height: 516, type: 'panel'});

当 chrome 中的面板被禁用时,它会打开一个弹出窗口。但问题是并非在每个 chrome 版本上都启用了面板。但人们可以在 chrome://flags 上手动启用它。因此,当标志被禁用时,我想将人们重定向到该页面,以便他们可以启用面板。

4

1 回答 1

12

alwaysOnTop您可以使用以下回调中的布尔属性检测打开的窗口是否为面板chrome.windows.create

chrome.windows.create({
    url: '...url...', // ...
    type: 'panel'
}, function(windowInfo) {
    // if  windowInfo.alwaysOnTop  is  true  , then it's a panel.
    // Otherwise, it is just a popup
});

如果要检测标志是否启用,请创建窗口,读取值,然后将其删除。因为创建过程是异步的,所以必须使用回调来实现值检索。

var _isPanelEnabled;
var _isPanelEnabledQueue = [];
function getPanelFlagState(callback) {
    if (typeof callback != 'function') throw Error('callback function required');
    if (typeof _isPanelEnabled == 'boolean') {
        callback(_isPanelEnabled); // Use cached result
        return;
    }
    _isPanelEnabledQueue.push(callback);

    if (_isPanelEnabled == 'checking')
        return;

    _isPanelEnabled = 'checking';
    chrome.windows.create({
        url: 'about:blank',
        type: 'panel'
    }, function(windowInfo) {
        _isPanelEnabled = windowInfo.alwaysOnTop;
        chrome.windows.remove(windowInfo.id);

        // Handle all queued callbacks
        while (callback = _isPanelEnabledQueue.shift()) {
            callback(windowInfo.alwaysOnTop);
        }
    });
}
// Usage:
getPanelFlagState(function(isEnabled) {
    alert('Panels are ' + isEnabled);
});

因为 flag 只能通过重新加载 Chrome 浏览器来切换,所以缓存 flag 的值是有意义的(如函数所示)。为了确保窗口创建测试只发生一次,回调被排队。

于 2012-11-29T17:46:26.897 回答