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

时间:2012-03-13 14:45:50

标签: 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;
      });
    });
  });

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

最有可能的是,关闭应用程序后(执行脚本完成后)会删除vvid值,但我该如何解决?如果可能,不使用localStorage或cookies。

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

2 个答案:

答案 0 :(得分:5)

  1. window更改为另一个变量名。
  2. 在变量名中保持一致。 window_listlist是不同的事情。
  3. 使用chrome.windows.update代替window.focus(),因为后者不起作用。
  4. 使用chrome.windows.get查看窗口是否存在,而不是维护窗口列表。
  5. chrome.windows.create的回调中提供了新窗口的详细信息。以正确的方式使用此方法:
  6. 代码:

    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;
                });
        }
    });
    

答案 1 :(得分:-1)

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;
            }
        );
    }
});

这是一个适合我的替代代码