CEF - A simple Chrome Extension development falsework

CEF是一个简单的Chrome Extension开发脚手架,它有如下功能:

  1. 模块化的结构,便于开发维护
  2. 支持模板
  3. 支持简单的数据绑定
  4. 发布工具,可对JS文件进行压缩,并输出干净的扩展文件

目录

1.获取并初始化

  1. git clone https://github.com/yuiitsu/CEF.git
  2. cd CES
  3. 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《搭个架子》的更多相关文章

  1. 一起来做Chrome Extension《一些问题》

    目录 Unchecked runtime.lastError: The message port closed before a response wa received. 使用 eval Conte ...

  2. 一起来做chrome扩展《本地存储localStorage》

    chrome中的本地存储其实也是用的HTML5中localStorage,唯一区别是chrome扩展有自己的localStorage,它属于这个扩展,而不属于一个域名.得用这一点可以很好的处理扩展自己 ...

  3. 一起来做chrome扩展《AJAX请求》

    chrome在一次更新之后,出于安全考虑,完全的禁止了content_script从https向http发起ajax请求,即使正常情况下也会在console里给出提示.这对于WEB来讲是好事,但对于扩 ...

  4. 开发Chrome Extension截取你微博的帐号密码

    Google允许开发者对Chrome浏览器做扩展,所以有了之前火爆的12306抢票软件,我 也用它抢过票,一直很好奇它怎么注入js到12306上面的.这周有空研究了下Chrome Extension, ...

  5. chrome extension overview

    目录 什么是扩展............................................................................................ ...

  6. 打包Egret游戏为Chrome extension

    今天,本来是打算做一个Chrome扩展去爬取网站base64编码图片的. 在跟着图灵社区<Chrome扩展及应用开发>敲demo代码的过程中,发现chrome的扩展的结构理论上可以兼容所有 ...

  7. 解决chrome extension无法下载的问题

    由于GFW把谷歌应用商店给屏蔽了,下载chrome扩展变得很困难. 我使用的是版本30.0.1599.101 m. 那么你需要做的第一个处理是,修改host文件,保证chrome应用商店可以登录.如下 ...

  8. 一起来做chrome扩展《页面右键菜单》

    本文主要内容 contextMenus的设置 打开权限 创建菜单 点击菜单 background script向content script发送消息 1. contextMenus的设置 1.1 打开 ...

  9. SAP成都研究院安德鲁:自己动手开发一个Chrome Extension

    各位好,我叫何金鑫(He Andrew), 团队同事亲切地称呼在下为安德鲁.如果你在附近找到wifi热点名为 「安德鲁森面包房5g」,可能是我就在附近,我们可以去喝杯咖啡,聊聊最近有趣的东西. 鄙人现 ...

随机推荐

  1. 用canvas画布画一个画板

    前段时间,在对H5的回顾中突然对canvas有了感觉,闲来无事便对其进行了一些捯饬.这不,上周我还做了一个好玩的画板呢,废话不多说,直接上代码(PS:翠花,上代码~): HTML部分: <!DO ...

  2. ajax +LoadLayer插件实现访问页面跳转loading..

    布局页:第一步进行扩展ajax$(function () { $.ajax2 = function (options) {//遮罩 Mask();//jquery 原生ajax $.ajax(opti ...

  3. Windows10 下 github ssh 访问出现 Permission denied(publickey)错误的解决方法

    Windows10 下 github ssh 访问出现 Permission denied(publickey)错误的解决方法. 错误信息: git clone git@github.com:ediw ...

  4. 【转】.NET内存管理、垃圾回收

    1. Stack和Heap    每个线程对应一个stack,线程创建的时候CLR为其创建这个stack,stack主要作用是记录函数的执行情况.值类型变量(函数的参数.局部变量 等非成员变量)都分配 ...

  5. Volo.Abp.EntityFrameworkCore.MySQL 使用

    创建新项目 打开 https://cn.abp.io/Templates ,任意选择一个项目类型,然后创建项目,我这里创建了一个Web Api 解压项目,还原Nuget,项目目录如下: 首先我们来查看 ...

  6. 一次MySQL线上慢查询分析及索引使用

    本文由作者郑智辉授权网易云社区发布. 0.前言 本文通过分析线上MySQL慢查询日志,定位出现问题的SQL,进行业务场景分析,结合索引的相关使用进行数据库优化.在两次处理问题过程中,进行的思考. 1. ...

  7. 基于SSH的客户关系管理系统CRM-JavaWeb项目-有源码

    开发工具:Myeclipse/Eclipse + MySQL + Tomcat 项目简介: 项目的编译和运行:1 将数据库导入MysSql里 :打开HeidiSql这个图形化工具,新建一个数据库, 可 ...

  8. leetcode 56 合并区间 JAVA

    题目: 给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [ ...

  9. NOI2019省选模拟赛 第三场

    传送门 明明没参加过却因为点进去结果狂掉\(rating\)-- \(A\) 集合 如果我们记 \[f_k=\sum_{i=1}^nT^i{n-i\choose k}\] 那么答案显然就是\(f_{k ...

  10. ROS(机器人URDF模型优化)

    URDF模型 xacro优化后的URDF模型 1.精简模型代码(创建宏定义,文件包含) 2.提供可编程接口(常量,变量,数学计算,条件语句) 常量定义: name:base_length的值value ...