2013-02-20 63 views

回答

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提供了一種方法來查看選項卡被固定,然後附加到該選項卡。一旦連接,您就可以從內部觀看標籤內容以進行標題更改事件,然後在此刻播放您的聲音。

+0

哦,還有,感謝Wlad從http://stackoverflow.com/questions/10661507/how-to-play-audio-in-an-extension獲取他的音頻代碼片段,並提防它可能會很快被棄用。 – 2013-02-21 00:10:50

+0

Tx爲您的幫助!我在[GitHub](https://github.com/judgeprophet/BingPinTab)上提供了我的AddOn。最後我做了一個帶有切換開關功能的Widget。 – JudgeProphet 2013-02-21 18:55:31