使用Firefox SDK选项卡监听器

时间:2014-04-27 17:45:54

标签: javascript firefox firefox-addon-sdk

我尝试使用Firefox SDK将现有Chrome扩展程序转换为其Firefox扩展程序。

我的插件需要检测Gmail(mail.google.com)是否在当前标签中处于打开/活动状态,如果没有,则在特定情况下启动监听器,以便每当有时都会向Gmail添加一些参数用户将打开Gmail标签页。

为了更清楚,这是我的代码在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;
            }
        });
    });
}

1 个答案:

答案 0 :(得分:2)

如果找不到gmail标签,则需要创建PageMod,如下所示:

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功能在两种情况下都相同,您甚至不需要循环切换选项卡。