## 屏幕点击
1 | selector { |
<input />
在iPhone里的键盘弹出问题
- 场景:有些时候需要对输入框做禁止输入的操作。通常,我们会直接想到传入属性
readonly="readonly"
- 但这对
<input />
是不足够的,在iPhone(Android是不会有这样的问题的)里,底部还是弹出了系统键盘的“上下箭头”和“确定”按钮,然后会把Web页面给顶起来,让页面出现了不正确的布局表现——需要按住这个弹出的键盘往下拉,才能让页面变得正常。 - 奇怪的箭头是iPhone为了方便用户在不同的可输入单元之间切换而增加的机制
- 通过设置
unselectable="on" tabindex="-1"
,甚至是onfocus="this.blur()"
都没有效果。 - 如果用JavaScript写了自动失去焦点的逻辑,在Xcode的模拟器上会成功的,但实际在7p、8p的测试机里还是会有弹出的效果,虽然没有上下箭头和确定按钮了,但页面还是受到了影响。
- 所以如果有需要禁止输入的业务场景被包含,尽量不要使用
<input />
标签
Date.parse()
Date.parse(datestring)
方法可解析一个日期时间字符串,并返回该日期时间距离 1970/1/1 午夜毫秒数。- 但是形如
Date.parse("2018-01-11 20:00:00")
在Safari下,是会产生问题的。 - 因为Safari要求
Date.parse()
或Date()
的日期字符串参数要满足RFC2822
或ISO 8601
定义的格式。如果格式不符合,就返回NaN
- 举个例子:ISO 8601要求在日期和时间之间需要使用字符“T”隔开,就好像
Date.parse("2018-01-11T20:00:00")
,如果要表示时区,还要在末尾增加标记。
一次因为iPhone手机名字和系统语言产生的Bug
- 业务场景是Hybird App,原生iOS框架给Web页面注入Cookie,其中需要把用户的手机名收集进去,但是出现了部分机型不能正确实现并且报错(js的错误)的Bug。
- 如果手机系统的语言是中文,你的手机名就是
“某某某”的 什么型号手机
- 如果手机系统的语言是英文,手机名则是
ABC's phone
- 微妙的坑出现在英文系统里——这个手机名里的单引号,如果直接把手机名引入某个字符串,就可能造成代码里的单引号不成对,引发报错。
- 上面的业务场景里,iOS用OC开发,字符串是
@"string"
这样的写法,也就是外面有一个双引号,如果把它放进同样是字符串的Cookie里,为了避免引号问题,可能会选用一对单引号包裹Cookie。但如果Cookie里其他字符还包含了单引号(不管是几个单引号),按上面这样直接操作,就要导致出错,无法解析。