Skip to content

小Tips集合 #1

@chang-ke

Description

@chang-ke

1、解决 canvas 将图片转为 base64 报错: Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported

受限于 CORS 策略,会存在跨域问题,虽然可以使用图像(比如 append 到页面上)但是绘制到画布上会污染画布,一旦一个画布被污染,就无法提取画布的数据,比如无法使用使用画布 toBlob(),toDataURL(),或 getImageData()方法;当使用这些方法的时候 会抛出一个安全错误

img.setAttribute("crossOrigin",'Anonymous')

2、利用Promise和await提供(伪)线程挂起功能

setTimeout(() => {
    console.log(111);
  }, 0);
const sleep = time => new Promise(resolve => setTimeout(() => resolve(), time));
await sleep(2000); //伪线程挂起
console.log(1)
// => 111,1

这样sleep函数后面的代码需要2秒之后才会执行,值得注意的是,sleep函数并不会阻塞之前已注册的函数
比如setTimeout里面的匿名函数

3、项目中的package名称不能和要安装的包名称一样,否则会报如下错误

npm ERR! code ENOSELF
npm ERR! Refusing to install package with name "puppeteer" under a package
npm ERR! also called "puppeteer". Did
you name your project the same
npm ERR! as the dependency you're installing?
npm ERR!
npm ERR! For more information, see:
npm ERR!     <https://docs.npmjs.com/cli/install#limitations-of-npms-install-algorithm>

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\1\AppData\Roaming\npm-cache\_logs\2018-05-19T07_30_36_044Z-debug.log

4、IE8中img.onload怪异行为

IE8中,onload是可以调用的,但是要放在src的赋值之前。
简单来说,就是要先告诉浏览器图片加载完要怎么处理,再让它去加载图片。避免因为加载缓冲区的速度太快,在没有告诉它加载完要怎么办时,它已经加载完了。而其它浏览器则是从缓冲区读取到图片时就执行onload。

5、使用eslint-loader时顺序在babel-loader前面导致webpack在开启热更新模式下无限重新编译

6、严格判断undefined没必要使用typeof undefined或者是Objec.prototype.toString.call,可以使用

undefined === void 0

7、webpack编译源码时会在命令行打印许多日志信息,其实这里面除了警告或者错误信息外,其它的输出都是没用的,我们可以使用

stats : 'errors-only' //对于 webpack-dev-server,这个属性要放在 devServer 对象里。

来取消这些信息的输出,更详细的用法见 webpack文档

8、使用jest + enzyme 对react进行快照测试的时候,如果你的组件结果发生改变,而快照没有更新,那么结果就是测试卡在这里跑不下去。解决办法就是使用 -u进行更新快照

9、使用-webkit-overflow-scrolling: touch,开启阻尼滑动支持,类似better-scroll的效果

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions