使用javascript在firefox-addon中关闭具有特定元标记的选项卡

时间:2015-06-21 20:44:23

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

我有这个插件,插入以下" meta"在它打开的页面上标记。到最后,我想关闭页眉上标记的所有标签。

<meta id="CLOSE_LATER">

我写了一个简单的for循环:

var TAG = "CLOSE_LATER";
var tabs = require("sdk/tabs");

for(var i=0; i<tabs.length; i++){
    var tab = tabs[i];

        console.log("****START****");
        console.log("CLOSING TAB : "+i+"of : "+tabs.length);
    searchTag(tab, TAG,i)
    .then(function success(rValue) {
        if (rValue) {
            tab.close();
            console.log("CLOSED i: "+i);                
        }
        else{
            console.log("NOT CLOSED i: "+i);
        }
    }, function failure(error) {
        console.log("Error : searchTag()");
    });
    console.log("****END****");     
}

其中searchTag()将脚本附加到页面&#34; seachtag.js&#34;搜索TAG。

searchTag()返回一个解析为TRUE的promise,如果它在页面上找到了TAG,则解析为FALSE。

示例情况:我有3个URL,其中只有URL-2和URL-3的头部有TAG。所以只有URL-2&amp;应该关闭3,但只关闭URL-3。

以下是示例日志:

enter image description here

1 个答案:

答案 0 :(得分:0)

试试这个:

var TAG = "CLOSE_LATER";
var tabs = require("sdk/tabs");

var success = function (rValue) {
    if (rValue) {
        this.close();
        //console.log("CLOSED i: "+i);                
    }
    else{
        //console.log("NOT CLOSED i: "+i);
    }
};

for(var i=0; i<tabs.length; i++){
    var tab = tabs[i];

        console.log("****START****");
        console.log("CLOSING TAB : "+i+"of : "+tabs.length);
    searchTag(tab, TAG,i)
    .then(success.bind(tab), function failure(error) {
        console.log("Error : searchTag()");
    });
    console.log("****END****");     
}

这会将您感兴趣的tab绑定到this函数中的success变量,以便success的每次调用都具有正确的tab与之合作的对象。

请注意,我注释掉了日志记录,因为您无法再访问i,但如果您希望再次使用该文件,那么您只需要封装tabi在每个循环迭代的新对象中,然后绑定它。

我之前没有在承诺中使用过这个技巧,所以承诺解决方案可以做一些事情来打破绑定,但希望不会。