一起来做Chrome Extension《搭个架子》
CEF - A simple Chrome Extension development falsework
CEF是一个简单的Chrome Extension开发脚手架,它有如下功能:
- 模块化的结构,便于开发维护
- 支持模板
- 支持简单的数据绑定
- 发布工具,可对JS文件进行压缩,并输出干净的扩展文件
目录
1.获取并初始化
- git clone https://github.com/yuiitsu/CEF.git
- cd CES
- npm install
2.项目结构
- dist // 发布文件夹
- scripts
- lib // 库文件夹
jquery.js
- module // 模块
- your module
event.js // 事件监听
module.js // 模块功能
view.js // 模板
app.js
model.js
run.js
- style
deploy.js // 发布脚本
manifest.json
注:本项目默认使用jQuery作为dom selector
3.使用
3.1创建Module
在module文件夹里创建Module文件夹,如:demo。接着在demo文件夹里创建module.js,event.js和view.js,
注:这3个文件并不是必须的,根据情况添加。比如,该模块并不需要模板,所以view.js就可以不要
在module.js中添加如下代码:
App.module.extend('demo', function() {
//
this.init = function() {
// todo.
};
});
extend的第一个参数为模块名,如果加载了该模块,可以在module, event, view里直接使用this.module.demo调用。
init方法为初始化方法,模块加载的时候即会执行。
接着添加一个方法:
App.module.extend('demo', function() {
//
this.init = function() {
// todo.
};
this.hello = function() {
console.log('Module demo hello.');
};
});
如下调用hello方法:
this.module.demo.hello();
3.2创建View
在demo文件夹下的view.js里添加如下代码:
App.view.extend('demo', function() {
this.hello = function() {
return `
<div class="ces-view-example">
<h1>CES View Example</h1>
<div>Hi, {{ data['name'] }}</div>
</div>
`;
};
});
同Module,extend第一个参数为view名称,hello方法返回一段html模板代码。view对象有3个方法,分别是:
- getView()
- display()
- append()
3.2.1getView()
function getView(name, method, data) {}
它有3个参数:
- name,view名称
- method, 方法名称
- data, 渲染数据
调用demo的hello方法:
let html = this.view.getView('demo', 'hello', {name: 'CEF'});
将会得到:
<div class="ces-view-example">
<h1>CES View Example</h1>
<div>Hi, CEF</div>
</div>
3.2.2display()和append()
这两个方法很明显,输出HTML到指定位置用的,参数相同
function display(name, method, data, target) {}
它们有4个参数,前3个同getView,最后的target即为目录对象,因为本项目使用了jQuery,所以这里是jQuery对象
调用:
this.view.display('demo', 'hello', {name: 'CEF'}, $('#xxx'));
3.2.3模板语法
// 变量附值
{{ var v = 1; }}
// 变量输出
{{ v }}
// 条件
{{ if v === 1 }}
// todo.
{{ else }}
// todo.
{{ end }}
// 循环
{{ var list = [1, 2] }}
{{ for var i in list }}
{{ list[i] }}
{{ end }}
// 调用其它模板
{{ var v = this.view.getView(); }}
// 渲染模板
{{ v }}
3.3创建Event
在demo文件夹的event.js里添加如下代码:
App.event.extend('demo', function() {
this.event = {
listenExample: function() {
// listen event
}
}
});
和之前一样,只是event只有一个默认的对象,this.event,当event.js被加载的时候,系统会自动执行this.event里的所有方法,不需要再手动执行监听了。
在event.js里同样可以使用this.module和this.view来调用module或view,但建议只调用module,渲染的工作交到它。
3.4发布
发布脚本可以去除项目目录下不需要的文件夹和文件,将对js文件进行压缩混淆。命令如下:
node deploy.js
3.4.1设置过滤
不需要发布的文件夹或文件,不需要压缩混淆的文件可以在deploy.js里配置
let excludes = {
'copy': [
'.gitignore',
'.DS_Store',
'builder.js',
'package.json',
'package-lock.json',
'README.md',
'.git',
'.idea',
'node_modules',
'dist'
],
'mini': [
]
};
其中excludes.copy为不需要发布的文件夹和文件,mini为不需要压缩混淆的文件
发布执行完成后,文件输出到dist文件夹,只需要将dist目录打包,上传Chrome Extension Store即可。
3.5加载文件
目前新增Module里的文件需要手动添加到manifest.json或是html文件里,后续会增加编译自动执行。因为考虑到可能的因素过多,
配置的代理可能会非常多,所以手动添加是目前比较好的处理方式。
一起来做Chrome Extension《搭个架子》的更多相关文章
- 一起来做Chrome Extension《一些问题》
目录 Unchecked runtime.lastError: The message port closed before a response wa received. 使用 eval Conte ...
- 一起来做chrome扩展《本地存储localStorage》
chrome中的本地存储其实也是用的HTML5中localStorage,唯一区别是chrome扩展有自己的localStorage,它属于这个扩展,而不属于一个域名.得用这一点可以很好的处理扩展自己 ...
- 一起来做chrome扩展《AJAX请求》
chrome在一次更新之后,出于安全考虑,完全的禁止了content_script从https向http发起ajax请求,即使正常情况下也会在console里给出提示.这对于WEB来讲是好事,但对于扩 ...
- 开发Chrome Extension截取你微博的帐号密码
Google允许开发者对Chrome浏览器做扩展,所以有了之前火爆的12306抢票软件,我 也用它抢过票,一直很好奇它怎么注入js到12306上面的.这周有空研究了下Chrome Extension, ...
- chrome extension overview
目录 什么是扩展............................................................................................ ...
- 打包Egret游戏为Chrome extension
今天,本来是打算做一个Chrome扩展去爬取网站base64编码图片的. 在跟着图灵社区<Chrome扩展及应用开发>敲demo代码的过程中,发现chrome的扩展的结构理论上可以兼容所有 ...
- 解决chrome extension无法下载的问题
由于GFW把谷歌应用商店给屏蔽了,下载chrome扩展变得很困难. 我使用的是版本30.0.1599.101 m. 那么你需要做的第一个处理是,修改host文件,保证chrome应用商店可以登录.如下 ...
- 一起来做chrome扩展《页面右键菜单》
本文主要内容 contextMenus的设置 打开权限 创建菜单 点击菜单 background script向content script发送消息 1. contextMenus的设置 1.1 打开 ...
- SAP成都研究院安德鲁:自己动手开发一个Chrome Extension
各位好,我叫何金鑫(He Andrew), 团队同事亲切地称呼在下为安德鲁.如果你在附近找到wifi热点名为 「安德鲁森面包房5g」,可能是我就在附近,我们可以去喝杯咖啡,聊聊最近有趣的东西. 鄙人现 ...
随机推荐
- 巧用网页开发者工具F12 审查、修改元素、去除广告、屏蔽遮罩
巧用网页开发者工具F12 审查.修改元素.去除广告.屏蔽遮罩 每当打开一个网页的时候,是否为页面有很多广告而烦恼:是否为要操作页面(例如观看超清视频),请先注册登录等等事情而麻烦:是否对网页加锁的视频 ...
- LightOJ 1197 LightOJ 1197(大区间素数筛选)
http://lightoj.com/volume_showproblem.php?problem=1197 题目大意: 就是给你一个区间[a,b]让你求这个区间素数的个数 但a.b的值太大没法直接进 ...
- 【cocos2d-x 手游研发----博彩大转盘】
博彩大转盘,转盘抽奖的小系统,这是一个很有意思的游戏模块,游戏中增加这样一些趣味的小模块,我会附上源码: 会增进玩家的粘性,每天都想来抽两把试试手气: 我做的这个是个矩形风格的转盘,不是那种圆形的转盘 ...
- SHOI2013 扇形面积并
题目链接:戳我 补一张图 我们尝试把圆上的扇形转化成直线上的矩形--我们维护[1,2*m]的区间,那么每个能产生贡献的子区间的长度*第K大的半径的平方的总和就是answer了. 怎么转化呢?左端点为a ...
- Learning Rich Features from RGB-D Images for Object Detection and Segmentation论文笔记
相关工作: 将R-CNN推广到RGB-D图像,引入一种新的编码方式来捕获图像中像素的地心姿态,并且这种新的编码方式比单纯使用深度通道有了明显的改进. 我们建议在每个像素上用三个通道编码深度图像:水平视 ...
- 【OCP-12c】CUUG 071题库考试原题及答案解析(18)
18.(8-7) choose twoWhich two statements are true regarding views? (Choose two.) A) A simple view in ...
- java中二维数组遍历
public class Demoshuzu2 { public static void main(String[] args) { int[][] arr2 = {{78,79,65, ...
- PRINT语句详解
首先摘自联机丛书中的PRINT语法如下: PRINT msg_str | @local_variable | string_exp 以上可看出PRINT语句的输出参数均为字符或字符串的常量或变量 - ...
- 【文文殿下】[BZOJ3277] 串
Description 字符串是oi界常考的问题.现在给定你n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中 至少k个字符串的子串(注意包括本身) Input 第一行两个整数n,k ...
- linux下安装nginx,centos安装nginx
初学nginx,进行简单的安装和配置. 一.依赖 openssl-fips-2.0.9.tar.gz zlib-1.2.11.tar.gz pcre-8.01.tar.gz nginx-1.8.0.t ...