Google Chrome扩展程序:仅创建一次窗口

aui*_*ino 4 javascript google-chrome google-chrome-extension google-chrome-devtools

我点击搜索栏附近的扩展按钮打开一个新窗口.我只想在尚未打开的情况下打开一个新窗口; 在那种情况下,我更喜欢展示旧的.

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

  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;
      });
    });
  });
Run Code Online (Sandbox Code Playgroud)

有人可以解释我如何解决它吗?

最有可能的是,在关闭应用程序后(在完成执行脚本之后)删除了值vvid值,但是如何修复它?如果可能,不使用localStorage或cookies.

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

Rob*_*b W 5

  1. 更改window另一个变量名称.
  2. 在变量名中保持一致.window_list并且list是不同的事情.
  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;
        }
    );
});
Run Code Online (Sandbox Code Playgroud)

或者,不是检查窗口是否存在,只需更新窗口,当发生错误时,打开一个新窗口:

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;
            });
    }
});
Run Code Online (Sandbox Code Playgroud)