2014-04-27 30 views
0

我試圖使用Firefox SDK將現有的Chrome擴展轉換爲與Firefox等效的文件。使用Firefox SDK的選項卡監聽器

我的插件需要檢測Gmail(mail.google.com)是否在當前標籤中處於打開狀態/活動狀態,如果不是,並且在特定情況下啓動了偵聽器,以便在Gmail標籤中添加一些參數到Gmail的URL將由用戶打開。

使其更清晰,這裏是我的代碼看起來像在Chrome:

background.js [Chrome擴展]

// Reload Gmail Tab(s) 
function reloadTab(order, behavior) { 
    chrome.tabs.query({ currentWindow: true }, function(tabs) { 

     var countGmailTabs = 0, 
      ntabs = tabs.length; 

     for (var i = 0; i < ntabs; i++) { 
      var t = tabs[i].url; 
      // Gmail found ! 
      if (/mail.google.com/g.test(t)) { 
       countGmailTabs += 1; 
       if(behavior === 'noisy') { 
        var GmailTab = tabs[i]; 
        // Do something... 
       } else { 
        // Reload Tab 
        chrome.tabs.reload(tabs[i].id); 
       } 
      } 
     } 

     // Gmail not found ! 
     if (countGmailTabs < 1 && behavior === 'noisy') { 
      // Start listener 
      chrome.tabs.onUpdated.addListener(GmailListener); 
     } 

    }); 
} 

// Gmail listener 
function GmailListener (tabId, info, tab) { 
    if (/mail.google.com/g.test(tab.url) && info.status === 'loading') { 
     // Do something... 

     // Now, let's relieve ourselves from our listener duties 
     chrome.tabs.onUpdated.removeListener(GmailListener); 
     return; 
    } 
} 

我在Firefox代碼目前看起來是這樣的。棘手的部分是當沒有檢測到Gmail選項卡時爲該選項卡實現監聽器...任何幫助表示讚賞!

main.js [Firefox插件]

var tabs = require('sdk/tabs') 

// [...] 

// Reload Gmail Tab(s) 
function reloadTab(order, behavior) { 

    var countGmailTabs = 0, 
     ntabs = tabs.length; 

    for (var i = 0; i < ntabs; i++) { 
     var t = tabs[i].url; 

     // Gmail found ! 
     if (/mail.google.com/g.test(t)) { 
      countGmailTabs += 1; 
      if(behavior === 'mute') { 
       var GmailTab = tabs[i]; 
       // Do something... 
      } else { 
       tabs[i].reload(); 
      } 
     } 
    } 

    // Gmail not found ! 
    if (countGmailTabs < 1 && behavior === 'noisy') { 
     GmailTabListener(order); 
    } 
} 

// Gmail Listener (the tricky part) 
function GmailTabListener(action) { 
    tabs.on('open', function(tab){ 
     tab.on('ready', function(tab){ 
      if (/mail.google.com/g.test(tab.url)) { 
       // Do something... 

       return; 
      } 
     }); 
    }); 
} 

回答

2

你需要創建一個PageMod如果找不到Gmail的標籤,就像這樣:

var pageMod = require('sdk/page-mod').PageMod({ 
    include: '*.gmail.com', 
    attachTo: 'existing',  // See comment below 
    onAttach: GmailListener 
}); 

function GmailListener (worker) { 
    var tab = worker.tab; 
    var Id = tab.index; 
    // Not sure what 'info' is 
    pageMod.destroy(); 
    // Do something 
} 

雖然我沒有測試過,你可以添加attachTo: 'existing',只要你的// Do something函數在兩種情況下都是相同的,你甚至不需要循環選項卡。

+0

謝謝!將一個監聽器附加到一個pageMod方法上。 – flo