作为一个豆瓣FM的重度用户和程序猿,能够为豆瓣FM编写Chrome扩展应用是一件让人兴奋的事情,这篇博文整理了豆瓣FM-Hacker的设计思想

1、说明

豆瓣FM-Hacker是一个Chrome扩展应用,主要用于嵌入豆瓣FM页面提供播放列表功能,即记录自打开豆瓣FM后播放的每首歌,并为每首歌曲提供了下载链接(QR二维条码)、播放、社会化分享、喜欢/取消喜欢和不再播放功能,效果图如下

2、思路

豆瓣FM的Web版,主要使用Flash来获取播放列表和播放歌曲等功能,不过也提供JavaScript交互的接口,这就使得我们有机可乘。

豆瓣FM每播放一首歌曲的时候都会调用一个JavaScript方法来设置一下页面信息(标题、当前歌曲),这个方法是window.extStatusHandler,而我要做的就是替换掉这个方法,以获取到歌曲信息,由于Chrome扩展应用的安全机制,content_script脚本是不能直接操作页面JavaScript的,所以需要让豆瓣FM页面外链一个JavaScript脚本。

3、实现

首先是最重要的扩展应用配置文件manifest.json

{ "name": "豆瓣FM-Hacker", "version": "0.4.0", "description": "嵌入豆瓣FM页面内,列举出豆瓣FM已播放的歌曲信息,并提供歌曲下载", "permissions": ["tabs", "http://*/*"], "icons": { "16": "image/icon16.png", "48": "image/icon48.png", "128": "image/icon128.png" }, "content_scripts": [ { "matches": ["http://douban.fm/*", "http://music.douban.com/*"], "css": ["hacker.css"], "js": ["jquery.js", "content_script.js"], "run_at": "document_start" } ] }
注意:在配置content_scripts的时候,需要将'run_at'设置为'document_start',这样content_script脚本就会在页面渲染开始时运行了,这个时候DOM已经OK了,可以操作DOM了

然后是content_script.js

function hackDouban(){ ...... var jsUrl = 'http://doubanfm-hacker.googlecode.com/svn/trunk/hacker.js'; $('body').attr('onload', '$(\'body\').append(\'<script type=\\\'text/javascript\\\' src=\\\'' + jsUrl + '\\\'></script>\');'); ...... } $("body").ready(hackDouban);
这样就可以在body加载完成后外链JavaScript脚本了

最后就是在外链的JavaScript脚本hacker.js里面替换掉那个JavaScript对象,有了hacker.js页面就完全拿下了,可以随心所欲的玩耍了。

豆瓣FM-Hacker是开源的,遵守GNU Lesser GPL,项目传送门

豆瓣FM-Hacker已经发布到Chrome web store,扩展传送门

后记:

1、content_script的CSS文件可以作用于页面,这样就不用外链CSS文件了

2、豆瓣FM的Flash播放器有个小Bug,情况是这样的,如果Flash无法获取播放列表,或尝试通过JavaScript来获取播放列表,但是在ActionScript代码中,判断条件始终为false,导致Flash无限去判断是否使用JavaScript来获取播放列表,我已经把这个Bug反馈给豆瓣了,但是没有得到答复,后来也没有去反编译他们的Flash播放器,所以不晓得有没有修改,不过这个Bug不影响使用

豆瓣FM-Hacker——豆瓣FM播放列表补全计划相关推荐

  1. 西安交通大学软件工程专业笔记补全计划

    文章目录 西安交通大学软件工程专业笔记补全计划 大一下 程序设计基础 面向对象程序设计 大二上 数据结构与算法设计 西安交通大学软件工程专业笔记补全计划 ⭐️写在前面 ⭐️ 这些笔记,绝大部分都是老师 ...

  2. unity技术补全计划

    将一个对象设置为不可见时仍可拾取,所以两者经常关联操作,不可视时设为不可操作 // 只有将垂直同步计数设置为0,才能锁帧,否则锁帧的代码无效// 垂直同步的作用就是显著减少游戏画面撕裂.跳帧,因为画面 ...

  3. 【计算机本科补全计划】Mysql 学习小计(2)

    正文之前 昨天下午写了篇 Mysql学习小计,结果出乎意料的受欢迎?变相刺激了我多写点 Mysql?好吧,如尔所愿.我晚上反正还不知道学点啥,就把今天看的那个菜鸟教程学完吧,到时候估计一点了,就可以睡 ...

  4. java时间规划书_【计算机本科补全计划】Java学习笔记(九) Java日期时间

    正文之前 终于好像仿佛看完了菜鸟教程的Java课程,感觉自己收获颇丰!很好,Java看完之后正愁如何开始进阶呢!结果发现菜鸟还准备了Java实例这种好东西!简直就是教程界的良心啊 !!!没事,先写写笔 ...

  5. 【计算机本科补全计划】王道单科--栈的实现以及一些性质

    正文之前 这几天深受<C++ Primer>困扰,昨晚看拷贝构造函数以及析构函数那一块真是看到快哭了.所以今天找点别的看看,缓解下因为看不懂Primer的书籍而带来的不快感.自然而然的,当 ...

  6. 【计算机本科补全计划】Mysql 学习小计(1)

    正文之前 以后是要做大数据的人,如果连结构化的数据库都不会的话,那岂不是笑死人?所以果断靠着当年兴趣盎然的时候学的那点基础来复习一下,发现果然学过一遍再来复习那基本就是高中学一段内容看书与翻书的区别, ...

  7. 【计算机本科补全计划】Mysql 学习小计(3)

    正文之前 想到自己每天中午还要玩一小时手机,就自责不已,今天看成甲的好好学习一书,颇有收获,晚上写给大伙看,现在还是谢谢 Mysql,到了后面感觉越来越难了呢!! 正文 Mysql 事务 Mysql ...

  8. ccf计算机认证考试题集,【计算机本科补全计划】CCF计算机职业资格认证 2017-03 试题初试...

    正文之前 我在之前的文章中提到过,我的老师要求我的CCF 考试考个280分来打个底,(没错,我就是那个横跨考研.工作.保研三大领域的男人)相当于是测试下我的能力,所以虽然不知道近期有没有相关的考试,但 ...

  9. 计算机ccf试题答案,【计算机本科补全计划】CCF 2017-03 试题初试

    正文之前 我在之前的文章中提到过,我的老师要求我的CCF 考试考个280分来打个底,(没错,我就是那个横跨考研.工作.保研三大领域的男人)相当于是测试下我的能力,所以虽然不知道近期有没有相关的考试,但 ...

最新文章

  1. centos搭建kvm
  2. Handle table中CAS操作与A-B-A Problem解析
  3. shell实例第10讲:判断用户输入的是否为数字
  4. [转载]细说ASP.NET Windows身份认证
  5. 开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
  6. Teams的MessageExtension最新功能:Initiate actions
  7. Android高德地图自定义Markers的例子
  8. Tomcat 8.5 配置 SSL 证书
  9. jq项目如何启服务_用小项目详解我们应该如何去构建我们的微服务
  10. Web应用程序系统的多用户权限控制设计及实现-总述【1】
  11. Neo4j数据导入与可视化
  12. 七、WGS84 UTM
  13. 解决主页被劫持的dos脚本
  14. 小度智能音响拆解 芯片_拆机解析,小度智能音箱1S,万能遥控版音箱,这做工你想不到...
  15. 萤石云设备接入操作说明
  16. cpu天梯图2022 cpu性能排行榜2022最新版
  17. 盘点2008年值得一看的电视剧
  18. 工厂模式,java描述
  19. 狄利克雷分布公式_潜在狄利克雷分配(LDA)
  20. 美国华盛顿州立大学计算机排名,华盛顿州立大学专业排名一览及最强专业推荐(USNEWS美国大学排名)...

热门文章

  1. 【tio-websocket】6、tio-websocket-server使用ByteBuffer收发消息
  2. 屏幕序列Screen Sequences
  3. 第6天2021-08-13
  4. html 设置整体字体,HTML字体的设置
  5. Oracle基础--PL/SQL编程--变量
  6. GKCTF domo
  7. 商城开发之商品分类表的设计、使用、管理
  8. 安装sql server踩坑记【sql2000程序安装配置服务器失败】
  9. MYSQL练习题:连续两天登录的游戏玩家比率
  10. 英语口语练习四之 You/We may/might (just) as well... (我们不妨……)用法