我希望firefox在引脚Tabs发生变化时播放声音?

时间:2013-02-20 15:32:45

标签: firefox browser firefox-addon

当我的某个pin标签发生变化时,Firefox可以播放一些“bing”吗?

实际上,Firefox会突出显示标签图标,但我也希望收到声音通知。

1 个答案:

答案 0 :(得分:2)

当然! :)你需要为此添加一个附件,但我可以帮助你了解相关细节。获取一个wav文件并将其放入加载项data目录中;我打电话给我的'ding.wav'

我采取了低级别观看标签的方法,尽管这可能不适合您。还有另一种更高级别的方法也可以工作,我在下面添加了对它的描述。但是这段代码确实有用。

var {Cc, Ci, Cr} = require("chrome");

var data = require('sdk/self').data;
var tabutils = require('sdk/tabs/utils');

// utility function
function newURI(uriStr, base) {
  var ios = Cc['@mozilla.org/network/io-service;1']
                .getService(Ci.nsIIOService);
  try {
    var baseURI = base ? ios.newURI(base, null, null) : null;
    return ios.newURI(uriStr, null, baseURI);
  }
  catch (e) {
    if (e.result === Cr.NS_ERROR_MALFORMED_URI) {
      throw new Error("malformed URI: " + uriStr);
    } else if (e.result === Cr.NS_ERROR_FAILURE ||
      e.result === Cr.NS_ERROR_ILLEGAL_VALUE) {
      throw new Error("invalid URI: " + uriStr);
    }
  }
  return null;
}

// actual function
function attachToTabs() {
  tabutils.getTabs().forEach(function (tab) {
    if (tab.getAttribute('pinned') === 'true') {
      var browser = tabutils.getBrowserForTab(tab);
      browser.addEventListener('DOMTitleChanged', function() {
        try {
          var sound = Cc["@mozilla.org/sound;1"].createInstance(Ci.nsISound);
          sound.play(newURI(data.url('ding.wav')));
        } catch (e) {
          console.log(e);
        }
      } );
    }
  });  
}

// call the actual function to run on startup
attachToTabs();

此代码不会主动关注固定的新标签,我会留给您。它仅在启动时运行一次以连接到现有的固定标签,因此每次固定新选项卡以使声音起作用时都必须重新启动。

-

与此方法相比,您还可以采用更高级别的方法来使用标签模块并附加到固定标签。 addon-sdk tabs module提供了一种方法,可以查看选项卡是否已固定,然后还可以附加到该选项卡。一旦连接,您就可以从内部观看标题内容以获取标题更改事件,然后在此时播放您的声音。