簡體   English   中英

Google Chrome擴展程序:僅創建一次窗口

[英]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;
      });
    });
  });

有人可以解釋我如何解決它嗎?

最有可能的是,關閉應用程序后(在完成執行腳本之后)刪除了vvid值,但是我該如何解決? 如果可能,不使用localStorage或cookies。

我已經嘗試在創建窗口時指定tabId屬性,但它不起作用。 我也嘗試過使用chrome.windows.onRemoved.addListener功能,但它也不起作用。

  1. window更改為另一個變量名稱。
  2. 在變量名中保持一致。 window_listlist是不同的東西。
  3. 使用chrome.windows.update而不是window.focus() ,因為后者不起作用。
  4. 使用chrome.windows.get查看窗口是否存在,而不是維護窗口列表。
  5. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM