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 回だけ行われるようにするために、コールバックがキューに入れられます。