2

ピンタブの1つが変更されたときに、Firefoxで少し「ビング」を再生できますか?

実際、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();

このコードは、固定される新しいタブを積極的に監視しません。それはあなたに任せます。起動時に1回だけ実行され、既存の固定されたタブに接続されるため、サウンドを機能させるには、新しいタブを固定するたびに再起動する必要があります。

-

このアプローチと比較して、タブモジュールを使用し、固定されているタブに接続するという、より高いレベルのアプローチを取ることもできます。addon-sdk tabsモジュールは、タブが固定されていることを確認してから、そのタブに接続する方法を提供します。アタッチしたら、タブのコンテンツを内側から見てタイトル変更イベントを確認し、その瞬間にサウンドを再生できます。

于 2013-02-21T00:09:03.997 に答える