2015-06-21 82 views
2

我有這個插件,它在打開的頁面上插入以下「元」標籤。向下結束時,我想關閉所有標籤頁眉。使用javascript在Firefox中使用特定元標籤關閉標籤

<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()連接腳本的頁面 「seachtag.js」 搜索TAG。

searchTag()返回解析爲真的promise,它在頁面上找到TAG,否則解析爲FALSE。

示例情況:我有3個URL,其中只有URL-2和URL-3標記了TAG。所以只應該關閉URL-2 & 3,但只關閉URL-3。

下面是示例日誌:

enter image description here

+0

我從輸出中看到的是searchTag()返回TRUE/FALSE for循環繼續,變量「tab」現在保持最後一個選項卡,並且由於searchTag()返回TRUE,它被關閉。如何暫停從前進到下一個循環,直到searachTag()返回一個值? – Gabriel

回答

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你在success功能感興趣的this變量,以便每次調用success將具有正確的tab對象。

注意,我註釋掉的記錄,因爲你不再需要i訪問,但如果希望重新工作,你只好封裝tabi在一個新的對象每次循環迭代,並綁定該網址。

我之前沒有在承諾中使用過這個技巧,因此承諾解析可能會做某些事情來破壞綁定,但希望不是。

+0

真棒......!那真的有用。謝謝 :) – Gabriel