[英]Google Chrome Extensions: create a window only once
我點擊搜索欄附近的擴展按鈕打開一個新窗口。 我只想在尚未打開的情況下打開一個新窗口; 在那種情況下,我更喜歡展示舊的。
這是我的代碼,但它不起作用。
var v = null;
var vid = null;
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.windows.getAll({}, function(list) {
// check if already exists
for(window in window_list)
if(window.id == vid) { window.focus(); return; }
chrome.windows.getCurrent(function(w) {
v = chrome.windows.create({'url': 'my_url', 'type': 'panel', 'focused': true});
vid = w.id;
});
});
});
有人可以解釋我如何解決它嗎?
最有可能的是,關閉應用程序后(在完成執行腳本之后)刪除了v
和vid
值,但是我該如何解決? 如果可能,不使用localStorage或cookies。
我已經嘗試在創建窗口時指定tabId
屬性,但它不起作用。 我也嘗試過使用chrome.windows.onRemoved.addListener
功能,但它也不起作用。
window
更改為另一個變量名稱。 window_list
和list
是不同的東西。 chrome.windows.update
而不是window.focus()
,因為后者不起作用。 chrome.windows.get
查看窗口是否存在,而不是維護窗口列表。 chrome.windows.create
的回調中提供了新窗口的詳細信息。 以正確的方式使用此方法: 碼:
chrome.windows.get(vid, function(chromeWindow) {
if (!chrome.runtime.lastError && chromeWindow) {
chrome.windows.update(vid, {focused: true});
return;
}
chrome.windows.create(
{'url': 'my_url', 'type': 'panel', 'focused': true},
function(chromeWindow) {
vid = chromeWindow.id;
}
);
});
或者,不是檢查窗口是否存在,只需更新窗口,當發生錯誤時,打開一個新窗口:
chrome.windows.update(vid, {focused: true}, function() {
if (chrome.runtime.lastError) {
chrome.windows.create(
{'url': 'my_url', 'type': 'panel', 'focused': true},
function(chromeWindow) {
vid = chromeWindow.id;
});
}
});
chrome.windows.getAll({}, function(window_list) {
var extWindow = '';
window_list.forEach(function(chromeWindow) {
//Check windows by type
if (chromeWindow.type == 'panel') {
extWindow = chromeWindow.id;
//Update opened window
chrome.windows.update(extWindow, {focused: true});
return;
}
});
if (extWindow == '') {
//Open window
chrome.windows.create(
{
'url' : 'my_url',
'type' : 'panel',
'focused' : true
},
function(chromeWindow) {
extWindow = chromeWindow.id;
}
);
}
});
這是一個適合我的替代代碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.