三重水的博客

在变化当中不断记录自己,充实自己,浏览自己

CentOS7安装mongodb和Node.js

安装Node.js

安装wget,curl,get,vim(linux上的常用工具)

1
yum install wget curl git vim

安装好这些工具后,可以利用wget或者curl来安装nvm(node的版本管理工具)

可以利用 wget安装

1
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

或者 curl安装

1
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

PS:安装好后,需要重新打开终端 nvm才会生效

nvm安装好后,即可以用nvm来安装任何Node.js版本了

1
nvm install v.8.9.4

微信h5页面开发遇到的坑

一、 长按图片为base64的图片,识别图中的二维码时,base64的字符个数有限制

经过测试大于大概为258286字符(大约500KB)的时候,在识别图时可以弹出正常的菜单,但是点击菜单项“识别图中二维码”则无反应。

需求背景: 拓展业务时,都会生成一个二维码页面用于分享给别人; 而二维码页面包含有,二维码图片,公司logo图,背景图,动态产品介绍文案 等构成的一个页面。

用于分享出去的东西最好的预期是,能把整个页面转换为图片分享出去效果是最好的,而不单单只分享一个二维码图片。所以就有以下需求点需要解决:

  • 把页面转换为图片
  • 让微信能正常识别图中的二维码

利用微信内置的长按功能即可以实现以上需求。在长按后,弹出来的菜单中,可以自己选择“保存为图片”,或者点击“识别图中二维码”直接进入推广页,或者也可以直接发送给朋友。

根据以上需求点,那么问题来了。

页面如何转换为图片呢?

通过html2canvas把页面转换为canvas,然后在通过canvas.toDataURL方法转换为base64图即可

用到的技术为html2canvas

如何使用呢?

CSP(内容安全策略)

前言

HTTP 响应头 Content-Security-Policy 允许站点管理者在指定的页面控制用户代理的资源。除了少数例外,这条政策将极大地指定服务源 以及脚本端点。这将帮助防止跨站脚本攻击(Cross-Site Script) (XSS).

语法

1
Content-Security-Policy: <policy-directive>; <policy-directive>

CSP的upgrade-insecure-requests指令

作用是?

假如访问的页面是通过https加载进来的html,那么当html中含有http的请求资源,浏览器就会有提示或报错,或浏览器的地址栏会出现黄色角标,提示用户页面中包含有不安全的请求。HTTPS 网页中加载的 HTTP 资源被称之为 Mixed Content(混合内容),不同浏览器对 Mixed Content 有不一样的处理规则。

什么时候浏览器会出现提示呢?

现代浏览器(Chrome、Firefox、Safari、Microsoft Edge),基本上都遵守了W3C的Mixed Content规范,将Mixed Content分为Optionally-blockable 和 Blockable 两类 属于Optionally-blockable的会在在控制台中打印警告信息。这类资源包括: * 通过<img>标签加载的图片(包括SVG图片) * 通过<video>,<audio><source>标签加载的视频或音频 * 预读的(prefetched)资源

原生拖放

前言

  • 最早引入拖放的是IE4, IE4当时只有两种对象可以拖放: 图像和某些文本; 唯一的放置目标:文本框;
  • IE5 扩展了新的事件,几乎网页中任何元素都可以作为放置目标;
  • IE5.5 任何元素都可以拖放

ps: HTML5就是以IE的拖放实例为基础制定了拖放规范的。

事件

拖动元素时发生的事件依次触发有3个:(事件目标为拖动的元素)

  • dragstart 按下鼠标键并开始移动鼠标时触发
  • drag 元素被拖动期间会持续触发
  • dragend 拖动停止时触发(无论元素是否放置在了有效目标上都触发)

当某个元素被拖动到一个有效的放置目标上时,依次会触发以下事件:(事件目标为放置目标的元素)

  • dragenter 只要有元素拖动到放置目标上,就会触发
  • dragover 被拖动的元素在放置目标范围中移动触发
  • dragleave/drop 被拖动的元素拖出放置目标范围触发dragleave/元素要是被放置到目标中触发drop