上一篇主要介绍了一些工作中和生活中的一些思考,这一篇主要整理一下,之前遇到的一些问题,以及解决方案(也有没有解决的问题,采用其他方案弥补)。
- 需求是移动端输入框,只能输入六位数字
产品的需求是做到和app一样的效果,用户无法输入除数字外的其他字符。想到的做法是监听keyup的keycode,然后根据输入字符的keycode判断是否可以输入。想法往往会被现实的残酷打倒,这种做法在兼容性上有很大问题,存在的主要问题如下:
- 输入法的兼容问题。无法获取某些android输入法的keycode或者是keycode为0,这种情况下基本上无解,我们做不了什么,来监听用户输入了什么
- 浏览器兼容性问题。存在虽然页面上不出现你输入的字符,但它却占用了输入框的可输入长度,并且提交的时候有值。
最后的做法是:只限制用户输入的长度,并且使用HTML5的属性,type=number默认调用数字键盘,并加上友好的提示来规避这个问题。
- 做内部管理后台,自然少不了图表等统计相关的展现
最早使用的是hightchars来完成,图表相关的工作,也整理了一个关于hightchars使用的实例吧。这个软件对外使用的话是需要付费的,这个一定要注意。最近关注了一个新的图表看了文档和api感觉很不错,有机会会试用一下,这里就推荐一下吧,官网:http://echarts.baidu.com/,github地址:https://github.com/ecomfe/echarts
- 需求是写一个邮件模版,兼容个主流邮箱(163,qq,gmail等)
使用场景是这样的,在注册的时候需要给用户发送邮件,点击激活帐号,或者是用户有敏感操作需要邮箱接收某些验证信息来完成整个流程的操作。这个模版是使用html和css完成的,并且各邮箱对样式的控制比较严格,所有class或id等选择器的样式基本上都会被过滤掉,最靠谱(在写网页时,被认为最不靠谱)的做法是行内样式,即:使用style或者本身的属性定义的样式是不会被过滤掉的,具体的可以来这里了解一下 。
- 获取当前文档编码格式
由于需要提供公共的js服务,会被各个业务引用到自己的页面内,但是又不能统一各业务使用相同的编码格式(由于历史原因,有些业务使用GBK编码,也不会因为引入我们公共的JS而进行全站的调整),所以我们需要检测网页当前的文档编码。,并在相关操作时传递给接口,告诉服务端,保证服务端正常处理用户所传数据。这里需要了解document的三个属性:charset、defaultCharset、characterSet,分别获取的是网页设置的编码、默认地区的编码、文档渲染的编码。了解了这个就可以按照自己的需求获取想要的编码类型了,具体的例子可以看看《获取当前文档编码的思考》
- 浏览器多次302调整,导致网页无法访问
我们的使用场景,由于公司很多域名状态需要同步,这样的话,在退出的时候,需要将其他域名登录状态退出,保证登录状态的一致性。之前的做法是访问一个地址,这个地址在服务端按照配置好的域名列表进行302调整退出,在域名少的时候没有功能上的问题(在IE下会出现页面不停闪动),在域名增多时,会出现跳转次数过多导致页面崩溃的情况。并且这个个浏览器情况不太一样,这里只需要记住限制最少的是IE7、8为10次,超过10次页面就会崩溃。具体各个浏览器的限制次数是多少可以查看《浏览器重定向限制问题》
- 新窗口打开和关闭
我们会试用window.open和window.close进行新窗口的开启和关闭,但是在双核浏览器中存在一个问题就是,当创建的窗口内核与父窗口的内核不一致时,新窗口无法通过window.close进行关闭。
- 在nodejs的大潮中,学习了nodejs,并使用奇舞团开源的thinkjs(http://thinkjs.org/)开发了一个文件存储和下载的网站,仅作学习使用
- 整理了一些平时开发中可能会经常使用到的工具
《js帮你计算属相》
《整理简易分享功能》
《跨域请求解决方案》
- 为了满足业务在开发过程中,苦于没有那么多帐号导致影响开发进度的状况,学习了一下插件的开发,并开发了一个帐号相关的插件,在这个过程中遇到了一个问题,最新chrome浏览器无法使用非官方商店下载的插件,此时@snadn提供了一个方案,完美解决。想要了解的可以看一下《chrome无法使用非官方商店扩展解决方法》
这里只是整理了一下自己工作以来遇到的问题和解决方案,不能说这些方法是自己独创的,大部分都是参考网络上各位分享的实现方法,自己在使用过程中整理的。肯定会有人说:介绍这些问题的文章到处都有,有必要自己再写一遍吗?做这样重复性的工作有什么用呢?对于这个问题我不知道是否有准确的答案,在这里我想说一下我为什么这么做:
- 网上查到的资料有不少是有问题的,在使用过程中,又遇到各种各样的问题,获取之前整理的时候也没有发现,在这里我可以整理并积累下来,如果能给别人带来帮助,那当然求之不得
- 别人的永远不是自己的,自己做了才知道会遇到什么问题,应该怎么解决,这个过程才是我们更想要的,或者说是我们可以提高的地方
- 是我自己学习、积累、沉淀的一个过程,就在今天我才发现,原来我遇到这么多问题,如果当时没有记录下来,可能我都忘记了
说了不少,都是自己的一些想法,也希望能和各位交流。