我平時(shí)上班時(shí)喜歡在線聽個(gè)收音機(jī)。當(dāng)然了,網(wǎng)頁版的在線收音機(jī)不考慮,因?yàn)榭傄蜷_一個(gè)網(wǎng)頁,經(jīng)常一不小心就關(guān)了。以前用過龍卷風(fēng)收音機(jī),但是經(jīng)常關(guān)閉程序之后進(jìn)程不結(jié)束,而且它自帶的電臺(tái)地址都不公開,看著心煩。作為一個(gè)firefox的忠實(shí)用戶,自然希望用一個(gè)firefox擴(kuò)展來實(shí)現(xiàn)收音機(jī)功能。在Firefox Add-ons網(wǎng)站上找了找,還真有這么一個(gè)插件,其中的收音機(jī)功能能夠滿足我的需求,但它帶了太多的私貨,有天氣預(yù)報(bào)、rss閱讀,尤其是帶了一個(gè)搜索框,還不能關(guān)掉。本來firefox已經(jīng)自帶了一個(gè)搜索框,我裝的google toolbar上也有一個(gè),再來一個(gè)搜索框,整個(gè)界面沒法看了,最終還是放棄了這個(gè)插件。 身為一個(gè)刀客...咳,錯(cuò)了,身為一個(gè)Geeker,這種情況下自然別無選擇,只好自己動(dòng)手了。雖然以前并沒有做過firefox的擴(kuò)展,不過我想這應(yīng)該難不倒一個(gè)Geeker。 首先自然是來到mozilla的關(guān)于擴(kuò)展/插件開發(fā)的官方網(wǎng)站Extension development,文檔不錯(cuò),大致看了看,很簡單嘛。說起來就是用XUL定義界面,用javascript響應(yīng)事件,然后用幾個(gè)配置文件把這些串起來。XUL可以現(xiàn)學(xué)現(xiàn)賣,不行咱還可以從別人的擴(kuò)展抄嘛,javascript自然不在話下,雖然很久沒看過了,寫幾個(gè)簡單函數(shù)那還不是小菜。網(wǎng)站上有現(xiàn)成的Tutorials,不到半小時(shí),一個(gè)界面雛形連帶基本的事件響應(yīng)就出爐了。界面很簡單,播放、停止、音量按鈕各一個(gè),再加一個(gè)選臺(tái)框和一個(gè)信息顯示欄。 接下來就是收音機(jī)功能了。思路照樣也很簡單,用javascript創(chuàng)建一個(gè)Media Player對(duì)象,然后用這個(gè)對(duì)象播放mms流就可以啦,核心代碼就幾行:
寫完收工,馬上測試,我靠,見鬼了,GeckoActiveXObject出錯(cuò),錯(cuò)誤是:uncaught exception: [Exception... "Unable to create an instance of the desired COM classCOM Error Result = 80004005" nsresult: "0x80570039 (NS_ERROR_XPC_COM_CREATE_FAILED)" 。又仔細(xì)檢查了一遍代碼,沒錯(cuò)呀,應(yīng)該就是這么寫的。 這下可真成卡門了,我迷迷糊糊覺得這應(yīng)該跟權(quán)限、策略設(shè)置什么的有點(diǎn)關(guān)系,可是不知道從哪兒下手,google上翻了一圈,也沒找到點(diǎn)建設(shè)性的意見。沒辦法,又打開我裝的其他擴(kuò)展,看別人是怎么搞的,其中一個(gè)跟我想要的功能類似的一個(gè)擴(kuò)展,光js文件就有4萬多行,UltraEdit打開都一頓一頓的,也看了一遍,還挑出其中的代碼測了一下,都不行。在這兒就卡了一下午,只好翻別人的插件,希望能找到點(diǎn)頭緒。最后還真翻出來點(diǎn)東西,在一個(gè)插件下發(fā)現(xiàn)有components目錄,里面有兩個(gè)文件,npmozax.dll和nsAxSecurityPolicy.js,從文件名看起來似乎跟安全策略有關(guān),打開看了看,沒啥特別的,一不做二不休,把整個(gè)components目錄拷到自己的目錄下,試了試,嘿嘿,行了。真是柳暗花明又一村啊,我覺得關(guān)于安全策略之類的mozilla的網(wǎng)站上應(yīng)該會(huì)講到吧,也許是我不仔細(xì),沒有找到,但是居然用拷貝兩個(gè)文件的方法解決了,具體原理以后有時(shí)間再看吧,先能用再說。 最后,秀一下我純手工打造的收音機(jī),雖然目前難看了一點(diǎn),但是能用,以后有空再改得好看點(diǎn) 今天光搞這個(gè)該死的權(quán)限就用了一天,工作進(jìn)度落下一大截,明天一定好好工作。
Powered by: C++博客 Copyright © 飄雪