Firefox Extension 开发

说一下场景,医院的内部网络是连入卫生专网的,有一个业务系统,并不是部署在本地,也无法和业务厂商进行数据对接,这个时候,需要去采集这个系统内的业务数据,一直没有想到很好的解决方案。

由于这个业务系统使用的B/S架构,使用的是火狐的浏览器,突然有一天就想到,是不是可以使用火狐的插件来实现,于是动手去研究起来了。

火狐的插件,起源的时间应该是很早之前,网上也没有找到很好的教程,所以只好翻找官方文档,今天也是把业务需求搞定了。所以想到了写这篇文章,梳理一下,一方面是Extension的大致脉络,还有一些是具体的细节问题,是怎么解决。

https://extensionworkshop.com/ 这个官方网站是入门的网站。

这张图对于理解Extension是非常关键了,描述了框架体系是怎样的。简单的说,manfest.json是入口文件,里面描述了插件的所有概要信息,包括插件的基本信息,图标,权限,关键页面的载入文件,如何更新插件等。

background可以理解后台常驻的脚本,一旦插件安装之后常驻在浏览器运行的,也是API功能最为强大的。

content_scripts是与打开的页面相互关联的,虽然没有background的API来的强大,但是因为能够注入到页面当中,所以能够获取和修改页面数据,也能够根据用户在页面的行为,产生互动。

browser_action是右上角图标用户点击后打开的页面,定义了单独的网页,在这个网页中可以进行用户的交互。

不同的Tab之间如何进行数据的交互

content_scripts可以通过消息机制,与background进行数据的互动。但是这种消息机制,只限于用户当前打开的页面。如果需要与不活动的Tab进行数据的交互,就需要使用browser.tabs.sendMessage来进行数据的交互,当然先要通过browser.tabs.query来找到你想要交互Tab的id。

jQuery在content_scripts的加载

manifest.json中是可以定义多个js文件的,但是在content_scripts是有加载顺序的,所以必须要把jQuery的js文件,放在前面,才可以保证顺利加载。

纯内网环境如何更新

企业内部部署的Extension,可以定义自动更新脚本的文件。但是这个文件必须要托管在https的网站上面,否则提交的Extension是无法通过签名的。由于纯内网环境,也没有配置DNS,也不想给每台电脑安装自签名的https证书,所以用另一个方法解决。

当打开业务系统页面的时候,获取当前Extension版本,然后请求内网服务器,与最新的API版本进行比较,如果有版本更新,则在业务系统显著位置显示横幅,引导用户点击下载最新的插件进行更新。

发表评论