【问题标题】:Tabs Listener using Firefox SDK使用 Firefox SDK 的选项卡监听器
【发布时间】:2014-04-27 17:45:53
【问题描述】:

我正在尝试使用 Firefox SDK 将现有的 Chrome 扩展程序转换为等效的 Firefox 扩展程序。

我的插件需要检测 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 选项卡时为选项卡实现一个侦听器...感谢任何帮助!

ma​​in.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;
            }
        });
    });
}

【问题讨论】:

    标签: javascript firefox firefox-addon-sdk


    【解决方案1】:

    如果找不到 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 函数在两种情况下都相同,你甚至不需要循环浏览选项卡。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多