我平时上班时喜欢在线听个收音机。当然了,网页版的在线收音机不考虑,因为总要打开一个网页,经常一不小心就关了。以前用过龙卷风收音机,但是经常关闭程序之后进程不结束,而且它自带的电台地址都不公开,看着心烦。作为一个firefox的忠实用户,自然希望用一个firefox扩展来实现收音机功能。在Firefox Add-ons网站上找了找,还真有这么一个插件,其中的收音机功能能够满足我的需求,但它带了太多的私货,有天气预报、rss阅读,尤其是带了一个搜索框,还不能关掉。本来firefox已经自带了一个搜索框,我装的google toolbar上也有一个,再来一个搜索框,整个界面没法看了,最终还是放弃了这个插件。 身为一个刀客...咳,错了,身为一个Geeker,这种情况下自然别无选择,只好自己动手了。虽然以前并没有做过firefox的扩展,不过我想这应该难不倒一个Geeker。 首先自然是来到mozilla的关于扩展/插件开发的官方网站Extension development,文档不错,大致看了看,很简单嘛。说起来就是用XUL定义界面,用javascript响应事件,然后用几个配置文件把这些串起来。XUL可以现学现卖,不行咱还可以从别人的扩展抄嘛,javascript自然不在话下,虽然很久没看过了,写几个简单函数那还不是小菜。网站上有现成的Tutorials,不到半小时,一个界面雏形连带基本的事件响应就出炉了。界面很简单,播放、停止、音量按钮各一个,再加一个选台框和一个信息显示栏。 接下来就是收音机功能了。思路照样也很简单,用javascript创建一个Media Player对象,然后用这个对象播放mms流就可以啦,核心代码就几行:
写完收工,马上测试,我靠,见鬼了,GeckoActiveXObject出错,错误是:uncaught exception: [Exception... "Unable to create an instance of the desired COM classCOM Error Result = 80004005" nsresult: "0x80570039 (NS_ERROR_XPC_COM_CREATE_FAILED)" 。又仔细检查了一遍代码,没错呀,应该就是这么写的。 这下可真成卡门了,我迷迷糊糊觉得这应该跟权限、策略设置什么的有点关系,可是不知道从哪儿下手,google上翻了一圈,也没找到点建设性的意见。没办法,又打开我装的其他扩展,看别人是怎么搞的,其中一个跟我想要的功能类似的一个扩展,光js文件就有4万多行,UltraEdit打开都一顿一顿的,也看了一遍,还挑出其中的代码测了一下,都不行。在这儿就卡了一下午,只好翻别人的插件,希望能找到点头绪。最后还真翻出来点东西,在一个插件下发现有components目录,里面有两个文件,npmozax.dll和nsAxSecurityPolicy.js,从文件名看起来似乎跟安全策略有关,打开看了看,没啥特别的,一不做二不休,把整个components目录拷到自己的目录下,试了试,嘿嘿,行了。真是柳暗花明又一村啊,我觉得关于安全策略之类的mozilla的网站上应该会讲到吧,也许是我不仔细,没有找到,但是居然用拷贝两个文件的方法解决了,具体原理以后有时间再看吧,先能用再说。 最后,秀一下我纯手工打造的收音机,虽然目前难看了一点,但是能用,以后有空再改得好看点 今天光搞这个该死的权限就用了一天,工作进度落下一大截,明天一定好好工作。
Powered by: C++博客 Copyright © 飘雪