4

パネルがChrome、JavaScriptで有効になっているかどうかを検出したいと思います。

現在、次のコードでパネルを作成できます。

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

Chromeのパネルを無効にすると、ポップアップが開きます。ただし、問題は、すべてのChromeビルドでパネルが有効になっていないことです。しかし、人々はchrome://flagsで手動でそれを有効にすることができます。したがって、フラグが無効になっている場合は、パネルを有効にできるように、ユーザーをそのページにリダイレクトしたいと思います。

4

1 に答える 1

12

alwaysOnTopのコールバックで boolean プロパティを使用して、開いているウィンドウがパネルであるかどうかを検出できます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);
});

フラグは Chrome ブラウザーをリロードすることによってのみ切り替えることができるため、(関数に示されているように) フラグの値をキャッシュすることは理にかなっています。ウィンドウ作成テストが 1 回だけ行われるようにするために、コールバックがキューに入れられます。

于 2012-11-29T17:46:26.897 に答える