如何关闭使用browser.windows.create()打开的窗口?

时间:2017-03-03 18:16:24

标签: javascript firefox-webextensions

我找不到解决此问题的任何问题/答案。对不起,如果我错过了什么。

我刚刚开始使用WebExtensions。我有一个窗口显示在我使用windows.create(); background.js 脚本中打开的窗口中。我无法弄清楚如何关闭该窗口(除了手动点击关闭框)。窗口已创建并正确显示我的表单。我甚至可以提交表格。但我不能让窗户关闭。我甚至尝试将内容脚本注入表单页面 - 我也无法从那里关闭它。我尝试将处理程序附加到按钮的click事件,没有运气。

据我了解,只有创建窗口的脚本才能关闭它。但我无法弄清楚,或通过在线搜索找到我将如何在我的browserAction后台脚本(创建窗口的位置)中执行此操作?

我在Debian上运行Firefox 51.

以下是创建窗口的代码。

background.js

var formUrl = 'http://example.com/api/test'
chrome.browserAction.onClicked.addListener(
  function(tab)
  {
    chrome.tabs.query({"active": true, "currentWindow": true}, function(tabs) 
      { 
      var target = tabs[0].url;
      if (target.substr(0,4) == 'http')
      {
        var encUrl = escape(target);
        var newUrl = formUrl + '?default=' + encUrl;
        w = chrome.windows.create({
          url: newUrl,
          width: 775,
          height: 350,
          type: 'popup'
        });
      }
      else
      {
        console.log("Only http(s) pages can be processed at this time.");
      }
    });
  }
);

2 个答案:

答案 0 :(得分:0)

API调用windows.remove()专门用于关闭窗口。您需要windowId id property作为windows.Window对象中的windows.create(),该Optimistic Locking对象将传递给{{3}}的回调/解析函数。

您无需从打开窗口的同一脚本中调用windows.remove()。任何有权访问该API的脚本都可以关闭窗口。

答案 1 :(得分:0)

您可以通过以下方式从“关闭”按钮中删除由Firefox中的扩展程序创建的窗口:

GetEl('dismiss').addEventListener('click',function(e)
    {
    browser.windows.getCurrent().then(F2);
    });
function F2(info)
    {
    return browser.windows.remove(info.id);
    } // F2

(GetEl返回给定id字符串的元素节点。)