Chrome extension开发小记
0x00
每次访问stackoverflow都有一点很烦,就是我如果想看一个回答发布的具体时间,只能把鼠标移到时间上等待两秒出现悬浮窗来显示。由于技术发展太快,所以有些五年前解决这个问题的相关API到了当前很可能已经不适用了或者已有了更好的解决办法,所以stackoverflow上我也会尽量看时间最近的讨论,显示完整的回答/评论发布时间对我来说就会方便很多。
为了解决这个痛点,我一直打算自己搞一个chrome的小扩展来修改页面的DOM,刚好今天手头活干完了,看了一下chrome扩展开发的文档,发现比想象中要简单很多,于是自己试了一下,完成了这个小扩展。
0x01
chrome的扩展核心文件是一个json,给浏览器提供一些关于扩展样式和行为的信息(主要是引用资源文件和脚本文件),还有必备属性如扩展名称和版本号。这个json文件叫做manifest.json,关于它的字段名可以参考官方文档。这里不再赘述。
我的扩展需要在stackoverflow.com/question/*
页面上自动执行修改DOM的操作,并且在document加载结束后执行,所以json文件这么写
0x02
接下来用chrome的开发者工具找到stackoverflow页面中显示时间的位置,找到对应的标签,answer的时间标签的class是relativetime
,comment的时间标签的class是relativetime-clean
,完整的时间在标签的title属性里。
0x03
接下来编写script.js脚本文件。这个脚本需要把上一步提到的那些元素找到,替换标签中间的文本内容为标签的title属性值。
脚本一定得在页面DOM元素加载完才能执行,否则是无法找到对应的标签的,所以最理想的位置是document.domContentLoaded
发生时。
完整代码如下
|
|
两个文件,11行JavaScript代码,就实现了这个功能。
0x04
其实你的chrome里的所有扩展,你都可以得到源码,方法如下:
- 在chrome地址栏输入
chrome://extensions
进入扩展程序管理页。 - 勾选中“开发者模式”,此时得到了所有扩展的ID。
- 在chrome地址栏输入
chrome-extension://<extensionID>/manifest.json
。
因为在地址栏输入chrome-extension://<extensionID>/<pathToFile>
就可以得到扩展程序中的对应文件,而每一个扩展程序必定包含manifest.json文件,扩展程序的所有html、css、js以及各种图片资源文件都需要在这个json文件中引用,所以可以通过这种方式获取到扩展程序的源码以及静态资源。