2

当我的一个固定标签发生变化时,Firefox 可以播放一点“bing”吗?

实际上,Firefox 会突出显示标签图标,但我也想要一个声音通知。

4

1 回答 1

3

当然!:) 您需要为此制作一个附加组件,但我可以为您提供相关详细信息。获取一个 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选项卡模块提供了一种查看选项卡已固定然后附加到该选项卡的方法。连接后,您可以从内部查看选项卡内容以获取标题更改事件,然后播放您的声音。

于 2013-02-21T00:09:03.997 回答