2019-07-02
[2019-07-31]在GitHub上的提交贡献没有出现在profile页的Contribution统计上
[2019-07-29]lodash严重安全漏洞可触发原型污染
[2019-07-25]Nodejs中, 获取引用模块的文件信息
[2019-07-18]安卓微信小程序, 连代理时webview的https请求发不出去
[2019-07-17]单行文本使用text-align: justify;
两端对齐
[2019-07-15]使用小程序插件时, 不能重写小程序全局变量Page
[2019-07-10]后端Set-Cookie如果不指定domain的话, 前端获取不了对应cookie的信息
[2019-07-04]小程序vh适配
[2019-07-03]浏览器跨域: 简单请求和非简单请求
[2019-07-02]线上出bug, 通过报错信息及本地source-map定位问题
[2019-07-31]在GitHub上的提交贡献没有出现在profile页的Contributions统计上
偶尔发现自己的提交并没有算在GitHub统计的Contributions
数据里
看了一下提交记录发限一下情况
# 正常的提交记录
funkyLover committed 12 minutes ago
# 没有算Contributions的提交记录
funkyLover authored and funkyLover committed 3 hours ago
搜了一下找到这份GitHub文档https://help.github.com/en/articles/why-are-my-contributions-not-showing-up-on-my-profile
其中针对提交贡献的情况有以下说明
Commits
Commits will appear on your contributions graph if they meet all of the following conditions:
The email address used for the commits is associated with your GitHub account.
The commits were made in a standalone repository, not a fork.
The commits were made:
In the repository's default branch (usually master)
In the gh-pages branch (for repositories with Project Pages sites)
只有满足上述所有条件, 才会算在Contributions
里面
最终发现是因为最近在GitHub的个人信息中改了邮件的地址, 和本地git配置中的邮件地址对不上才导致的这个问题
最后改了本地git配置的邮箱地址就解决了
git config --global user.email ahui-lin@qq.com
[2019-07-29]lodash严重安全漏洞可触发原型污染
一开始对这个漏洞没有概念, 只是单纯根据指示升级lodash而已
后面才看到 Lodash 严重安全漏洞背后 你不得不知道的 JavaScript 知识 这篇文章才完全搞懂
详细讲解可以查看原文, 这里仅做一下记录方便自己回顾
原型污染是指攻击者通过某种手段修改 JavaScript 对象的原型(prototype)
const payload = '{"constructor": {"prototype": {"toString": true}}}'
_.defaultsDeep({}, JSON.parse(payload))
对应上例,Object.prototype.toString 就会非常不安全了。
[2019-07-25]Nodejs中, 获取引用模块的文件信息
场景如下
// a.js
module.exports = () => {
// 在这里如何获取引用a模块的模块b的文件信息, 如b文件的完整路径
}
// b.js
const a = require('path/to/a.js');
a();
在stackoverflow上找到的方案nodejs-get-filename-of-caller-function
function _getCallerFile() {
var originalFunc = Error.prepareStackTrace;
var callerfile;
try {
var err = new Error();
var currentfile;
Error.prepareStackTrace = function(err, stack) {
return stack;
};
currentfile = err.stack.shift().getFileName();
while (err.stack.length) {
callerfile = err.stack.shift().getFileName();
if (currentfile !== callerfile) break;
}
} catch (e) {}
Error.prepareStackTrace = originalFunc;
return callerfile;
}
[2019-07-18]安卓微信小程序, 连代理时webview的https请求发不出去
出于安全考虑, 从微信7.x版本开始小程序就不再信任用户的本地证书
就是你手机连着代理想再本地调试时, 会发现请求都发不出去
后来好像调整成了开发版和体验版下, 打开调试模式, 就能正常连代理进行
但是webview下如果连了代理, 好像打开调试也没有办法发出https请求, ios下倒是没有问题能正常调试
已反馈官方, 坐等修复
[2019-07-17]单行文本使用text-align: justify;
两端对齐
css规范中可以使用text-align: justify;
来是文本两端对齐, 但是其是作用于多行文本, 且最后一行不生效
而如果是单行文本需要两端对齐, 因其只有单行, 是第一行也是最后一行, 所以单纯设置该属性是没有效果的
目前副作用比较小的做法, 是使用伪元素添加一行空行, 使单行文本变成多行文本且非最后一行
/* https://stackoverflow.com/questions/17538151/how-to-make-text-take-full-width-of-its-container */
div {
text-align: justify;
/* 需要注意, 因为使用伪元素添加一个空行, 会是容器高度增加, 如果不希望高度增加的, 需要显式设置height */
height: 20px;
}
div:after {
content: "";
display: inline-block;
width: 100%;
}
[2019-07-15]使用小程序插件时, 不能重写小程序全局变量Page
很多情况下我们会重写Page变量好注入我们自己的逻辑
但是在使用小程序插件的情况下, 小程序会报错提示不能重写
如mta的小程序上报sdk, 会重写Page注入生命周期函数进行页面PV/UV统计
这个时候可能就会导致MTA统计的数据不准确等问题
[2019-07-10]后端Set-Cookie如果不指定domain的话, 前端获取不了对应cookie的信息
发现这个问题是在调试时候, 为了清除登录态在Chrome开发工具上删除了所有的cookie
但是很奇怪的发现前端发起的请求中依然有cookie信息
后来定位到是后端在Set-Cookie时并没有指定domain
如果没有指定domain的话, 在开发者工具下也不会展示对应的cookie, 使用document.cookie
也无法获取到
[2019-07-04]小程序vh适配
对于单屏页面的适配方案, 可以通过vh来解决
设计以iphone7与iphone X为标准输出标注稿
小程序判断是否为全面屏, 字号不做适配, 但涉及布局的margin/padding等, 按需切换成vh/vw
/* 怕出现不支持vh的设备, 采用了较为稳妥的方式 */
.title {
margin-top: 10rpx;
margin-top: 0.74vh; /* 10 / 13.34 */
}
.fullscreen .title {
margin-top: 15rpx;
margin-top: 1.12vh; /* 1.12 / 13.34 */
}
这样可以适配绝大部分主流屏幕, 包括早期虽然屏幕宽高比为9:16, 但有虚拟按键的安卓机
如果还要适配iphone4(为你默哀), 则还需要设计输出小屏手机的标注稿
[2019-07-03]浏览器跨域: 简单请求和非简单请求
当前端进行跨域请求时, 浏览器针对简单请求和非简单请求有不同的处理
如果为简单请求, 浏览器会把直接发送, 而如果是非简单请求, 浏览器会先发一个OPTIONS
请求确认服务器支持CORS
, OPTIONS请求成功之后才会帮我们发出真正的业务请求
而只要满足以下所有条件即为简单请求
- 请求方式只能是: GET, POST, HEAD
- 不得人为设置下面集合以外的HTTP请求头字段
- Accept, Accept-Language, Content-Language, Content-Type, DPR, Downlink, Save-Date, Viewport-Width, Width
- Content-Type只能取以下值
- application/x-www-form-urlencoded, multipart/form-data, text/plain
- 请求中的任意
XMLHttpRequestUpload
对象均没有注册任何事件监听器 - 请求中没有使用
ReadableStream
对象
[2019-07-02]线上出bug, 通过报错信息及本地source-map定位问题
前端代码上线时不能把source-map同时上线, 因为source-map里包含了源码的信息, 只要通过工具就可以还原源码, 造成源码泄露
一般而言都需要搭配监控体系来完成生产, 生产环境报错会记录到监控后台, 获取到错误堆栈信息再通过source-map的api即可定位源码信息
大家可以查阅《线上出bug了?别怕,这么定位!》这篇文章后半部分内容.