Google Chrome扩展:只创建一次窗口

Google Chrome Extensions: create a window only once

本文关键字:一次 窗口 创建 Chrome 扩展 Google      更新时间:2023-09-26

单击搜索栏附近的扩展按钮打开一个新窗口。只有在还没有打开的情况下,我才想打开一扇新窗户;如果那样的话,我更愿意展示旧的。

这是我的代码,但它不起作用。

  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或cookie。

我曾尝试在创建窗口时指定tabId属性,但不起作用。我也尝试过使用chrome.windows.onRemoved.addListener功能,但它也不起作用。

  1. window更改为另一个变量名
  2. 变量名称要一致。CCD_ 6和CCD_
  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;
            }
        );
    }
});

这是一个适用于我的替代代码