2020一点总结

Posted by Turingdo Studio on September 27, 2020

最近处理比较棘手的问题

  • 拦截浏览器回退,跳转到指定路由
    问题描述:通过 window.addEventListenner('popState') 不能很好的拦截浏览器回退,对单页面应用,如果按照正向流程,从一个页面跳转到下一个页面,可以起作用。但是 在从一个页面,回退到一个尚未访问过的路由,事件监听机制不起作用。
    解决:降级处理,通过DOM0级的事件监听可以,window.onpopstate = function(){}

  • 处理onBlur事件与onClick事件的冲突问题
    问题描述:当input 触发 onBlur事件处理异步请求的校验时,当请求尚未完成,去点击提交按钮时候,onClick第一次点击无反应,必须触发第二次。
    解决:1. 可以使用setTimeout处理onBlur事件 2. 可以使用onmousedown取代onClick事件

  • 处理MacPro下面输入法问题
    问题描述: 在mac电脑下使用Apple自带输入法,输入中文中断问题
    解决: 这是一个bug,在input事件中执行了 trim,去掉即可。当时没有mac,只能在window,大概定位问题所在。

  • 遇到一个惊喜: 开发了一个广告模块 取className名称 ul.ad-list li.ad-item 竟然和Chrome下广告模块类名冲突,默认的类名下 模块display:none!important; 所以会导致莫名其妙的广告模块不显示。这个只有在特定摸个版本的Chrome下面会出现。

  • 处理web-server代理的配置

问题描述: 由于项目中api设计不规范,没有统一的命名空间 类似/api/xxx,导致设置代理拦截困难
解决:通过 process.env.NODE_ENV 在开发环境中设置一个虚拟参数 ?vAPI=1,进行拦截

headers:
  Access-Control-Allow-Origin: '*'
proxy:
  rules:
    # 项目中api接口没有规范可循
    # 在开发环境中自定义一个虚拟参数vAPI作为接口匹配规则
    \?vAPI: 'http://xxx.dev.test'