FireFox AddOn SDK关闭当前选项卡

时间:2015-03-30 08:39:05

标签: javascript firefox firefox-addon firefox-addon-sdk

我正在使用附加SDK移植FireFox的Chrome扩展程序。我正在使用require("sdk/page-mod")在文档的开头运行内容脚本。

在代码中,如果满足某些条件,我需要关闭当前选项卡。在Chrome中,我可以向 background.js 文件发送消息,让它关闭当前标签,但我无法弄清楚这一点。

window.close()非常不可靠,我需要找到一种方法从我的内容脚本中调用 main.js 文件中的函数。

感谢您的帮助。

编辑: 以下是我的Chrome代码,我需要将其移植到FF AddOn SDK(FF Extension)。

//in the content.js file
function closeCurrTab() {
    chrome.runtime.sendMessage({action: "closeTab"}, function() {});
}


//below in the background.js file
chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        switch (request.action) {
            case 'closeTab':
                try {
                    chrome.tabs.getSelected(function(tab) {removeTab(tab.id);});
                } catch (e) {
                    alert(e);
                }
                break;
        }
    }
);

function removeTab(tabId) {
  try {
    chrome.tabs.remove(tabId, function() {});
  } catch (e) {
    alert(e);
  }
}

3 个答案:

答案 0 :(得分:2)

内容脚本中的

self.port.emit("close-tab");
在main.js中

PageMod({
  include: "*",
  contentScriptFile: "./content-script.js",
  onAttach: function(worker) {
    worker.port.on("close-tab", function() {
      tabs.activeTab.close();
    });
  }
});

答案 1 :(得分:1)

如果您正在开发firefox的扩展名,可能会有以下帮助:

 function onError(error) {
   console.log(`Error: ${error}`);
 }

 function onRemoved() {
   console.log(`Removed`);    
 }

 function closeTabs(tabIds) {
   removing = browser.tabs.remove(tabIds);
   removing.then(onRemoved, onError); 
 }

 var querying = browser.tabs.query({currentWindow: true});
 querying.than(closeTabs, onError);

答案 2 :(得分:0)

这将关闭当前标签:

require("sdk/tabs").activeTab.close();

这是一个扩展示例,它实现了一个关闭当前标签的工具栏按钮(愚蠢的例子,我知道):

var ActionButton = require("sdk/ui/button/action").ActionButton;
var button = ActionButton({
  id: "my-button-id",
  label: "Close this tab",
  icon: {
    "16": "chrome://mozapps/skin/extensions/extensionGeneric.png"
  },
  onClick: function(state) {
    require('sdk/tabs').activeTab.close();
  }
});

有关详细信息,请参阅documentation for the tabs module