# doc.front **Repository Path**: lbc19920615/doc.front ## Basic Information - **Project Name**: doc.front - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-04-06 - **Last Updated**: 2020-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 介绍 ## 前端团队文档 ### 预览文档须知 本文档推荐使用[docute](https://docute.js.org/#/home)预览 也可以运行在任一http服务器 npm install docute-cli -g ``` docute . --port 7970 ``` ## 工具 ### babel编译工具 https://babeljs.io/repl/#?babili=false&browsers=&build=&builtIns=false&code_lz=M4AgvCDeB0sIwF8DcQ&debug=false&forceAllTransforms=false&shippedProposals=false&circleciRepo=&evaluate=false&fileSize=true&lineWrap=true&presets=es2016%2Ces2017%2Cstage-2%2Cstage-3&prettier=false&targets=&version=6.26.0&envVersion= 更多推荐工具 ## 测试 ### selenium https://www.jianshu.com/p/ff64afac8b3f https://github.com/seleniumQuery/seleniumQuery/wiki/seleniumQuery-and-IE-Driver https://www.cnblogs.com/fnng/p/5854875.html ## 服务 ### snippet #### log console.log ```phpstorm console.log($1$); ``` ## 推荐 https://blog.csdn.net/gao_xu_520/article/category/6887279 http://nthmaster.com/ ## 模板 ### 移动端 2018年 最佳模板 #### 目标浏览器 * android默认浏览器 chrome >= 33 (android 5.0) * uc浏览器 chrome = 57 * qq浏览器 chrome = 53 * 微信浏览器 chrome = 53 * safari浏览器 safari >= 9.0 #### 逐步实现pwa [pwa简介](https://lavas.baidu.com/pwa/engage-retain-users/add-to-home-screen/introduction) #### 使用dns-prefetch [DNS预获取 dns-prefetch 提升页面载入速度](http://forthxu.com/blog/article/80.html) #### 使用preload ```html ``` [关于Preload, 你应该知道些什么](https://www.jianshu.com/p/24ffa6d45087) #### 停止使用jquery jquery的方法浏览器大部分都有替代方案 dom4 可以解决一部分代码缺失问题 ```html ``` #### 使用webcomponents webcomponents 允许解析自定义标签 有利于seo #### 参考模板 ```html title
``` manifest.json ```json { "short_name": "短名称", "name": "这是一个完整名称", "icon": [ { "src": "icon.png", "type": "image/png", "sizes": "48x48" } ], "start_url": "index.html" } ``` ## 小程序 ### 官方文档地址 [框架](https://mp.weixin.qq.com/debug/wxadoc/dev/framework/MINA.html) [组件](https://mp.weixin.qq.com/debug/wxadoc/dev/component/) [API](https://mp.weixin.qq.com/debug/wxadoc/dev/api/) ### 小程序天生的坑 1. 小程序不支持attribute选择器 2. background-image不支持本地图片 3. 小程序资源缓存问题 ### 果师兄小程序 #### app 结构 ![](app.png) - app.core 【核心】 - assets 【资源】 - config 【配置】 - pages 【页面】 - com-aux-button 【组件】 - page-a 【页面a】 - utils 【工具】 - vendor 【引用】 - wxs 【脚本】 #### 获取用户权限 回家吃烫饭 ```javascript /** * 获取用户权限 * * @param key * @param options * @returns {Promise} */ getPromission: function(key, options = {}) { return new Promise(function (resolve, reject) { wx.getSetting({ success: (res) => { /* * res.authSetting = { * "scope.userInfo": true, * "scope.userLocation": true * } */ if (typeof res.authSetting[key] === "undefined" || res.authSetting[key] === null) { // 微信第一次安装时不会管setting reject({ code: 1 }); } else { if (res.authSetting && res.authSetting[key] === true) { resolve(); } else { wx.authorize({ scope: key, success(res) { resolve(); }, fail(res) { wx.showModal({ title: options.title, content: options.content, success: function (res) { if (res.confirm) { wx.openSetting({ success: function (data) { if (data) { if (data.authSetting && data.authSetting[key] === true) { resolve(); } else { reject({ code: 0 }); } } else { console.warn("没有设置"); reject({ code: 2 }); } }, fail: function () { console.warn("打开设置失败"); reject({ code: 2 }); } }) } else if (res.cancel) { reject({ code: 3 }); } } }) } }) } } } }) }); } /** * 请求用户权限 * 如果用户拒绝 下一次请求时会先询问 * onFirstRequest 第一次请求 * onOpenSettingError 打开设置失败 * onUserRejectOpenSetting 用户拒绝打开用户设置 * onUserReject 用户拒绝 * * @param key * @param options * @returns {Promise} */ requestPermission: function(key = "scope.userInfo", options) { var self = this; return new Promise(function(resolve, reject) { self.getPromission(key, options).then(function () { resolve(); }).catch(function (e) { if (e.code === 1) { if (options && options.onFirstRequest) { options.onFirstRequest(); resolve(); } } else if (e.code === 2) { if (options && options.onOpenSettingError) { options.onOpenSettingError(); } } else if (e.code === 3) { if (options && options.onUserRejectOpenSetting) { options.onUserRejectOpenSetting(); } } else { if (options && options.onUserReject) { options.onUserReject(); } } // 高级错误 // reject(new aui.RejectRequestPermissionError()); }); }) } ``` example ```javascript self.requestPermission("scope.userInfo", { title: '将要打开设置界面', content: '请允许使用用户信息' }).then(function () { // console.log("用户同意了"); }).catch(function(e) { // console.log("用户不同意"); if (e instanceof aui.RejectRequestPermissionError) { } }) ``` #### 请求用户信息授权 1. wx.login 2. app.requestUserInfo 请求用户用户信息授权 3. app.setWxUserInfoLocal 保存一些用户基本信息到本地 #### token刷新 1. app.getAccessTokenByRefreshToken 重新获取一次token #### token失效登录 如果没有授权过用户信息就进入请求用户信息授权步骤 1. wx.login 2. wx.getUserInfo 获取新的code 3. app.getNewToken 获取新token #### ajaxGet, ajaxPost 类似于fetch 请求一个http url 返回一个Promise #### ajaxGetAPI, ajaxPostAPI ajaxGet, ajaxPost 的简单封装 api转义源在app上的私有变量globalApis #### 带auth的ajax请求 使用safeFetch safeFetch 默认使用ajaxGetAPI 带用户信息验证 1. get ```javascript safeFetch('api', {}) ``` 2. post ```javascript safeFetch('api', submitData, {}, 'Post') ``` ### javascript 加操作符解释 http://www.jb51.net/article/34475.htm 参考文档 https://www.zhihu.com/question/21484710 https://www.cnblogs.com/yugege/p/5277883.html http://www.qiutianaimeili.com/html/page/2017/08/ap8d1w6oml.html https://segmentfault.com/a/1190000011007975 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness http://www.jb51.net/article/50748.htm