【原创】我对IE了解得还是太少了

一个小问题引发的血案

最近又开始接触一些PC端需要兼容IE的业务需求了,几段代码写下来,才发现我对IE了解还是太少了。做了个老虎机抽奖的需求,需要对中奖结果区分显示,简单可以描述为这样:三个滚轮,每个可能产生三种图标,若用户中奖,则三个滚轮显示结果完全相同,否则三个滚轮显示结果不能完全相同。

于是,我开始设计了以下算法:

var isWin = (json.result && json.winner), // json抽奖接口返回结果
    rs = [],
    str = ‘123‘,
    num = 2;
if (isWin) {
    num = +(str[Math.floor(Math.random() * 3)]);
    rs = [num, num, num];
} else {
    rs[0] = +(str[Math.floor(Math.random() * 3)]);
    str = str.replace(rs[0] + ‘‘, "");
    rs[1] = +(str[Math.floor(Math.random() * 2)]);
    rs[2] = +(str[Math.floor(Math.random() * 2)]);
}

这一切看起来如此简单,Chrome、Firefox、IE9运行结果都很理想,然后自信满满的忽略了IE6/7,提交了代码。然而,现实总是残酷的,没过多久就有测试人员告诉我:我出现三个滚轮显示一样,结果却显示我未中奖了!

毕竟也算是个程序员,我本能的反应:不会吧,我本地是好的啊,是不是你的hosts没绑?浏览器有问题?缓存了?…好吧,结果还是我错了,因为接二连三有人发现了这类现象。

于是,我开始反复的琢磨上面的代码,我将上面的代码拷贝到控制台单独执行,最后查看rs数组中三个结果值,而我的每次执行结果都跟我预期的一样,感觉完全没有问题。由于没有了解清楚问题的必现环境,我误以为是概率性事件,我又写了一个用例,让我的代码执行了3万次,而结果还一如既往的正常!于是我大胆的确定这不是概率性事件,应该是有某种特定的条件。所以我开始向遇到同类问题的测试人员咨询他们的运行环境,终于让我找到了问题所在:他们有的是在高版本IE的低版本文档模式中发现,有的是在低版本的IE浏览器中发现。我在IE9的IE7文档模式中执行了一下我的代码,发现rs得到的竟然是[NaN, NaN, NaN],好吧,那么问题就显而易见了——str[Math.floor(Math.random() * 3)]没有得到预想的结果,原来低版本IE不支持中括号形式获取指定位置的字符。

于是,有了下面这段代码:

var isWin = (json.result && json.winner), // json抽奖接口返回结果
    rs = [],
    str = ‘123‘,
    num = 2;
if (isWin) {
    num = +(str.split(‘‘)[Math.floor(Math.random() * 3)]);
    rs = [num, num, num];
} else {
    rs[0] = +(str.split(‘‘)[Math.floor(Math.random() * 3)]);
    str = str.replace(rs[0] + ‘‘, "");
    rs[1] = +(str.split(‘‘)[Math.floor(Math.random() * 2)]);
    rs[2] = +(str.split(‘‘)[Math.floor(Math.random() * 2)]);
}

好吧,先将字符串拆分成数组,再去取值就没问题了。

上面虽是个低版本IE浏览器中的小case,但确实证明我对IE了解得太少了,下面再给大家分享一个最近刚学到的高版本IE中的坑!

“高大上”的高版本IE

前几天刚收到一本《移动Web手册(双色)》,介于目前移动开发是趋势,我花了三天时间将这本书通读了一遍。总的来说,书的内容不多,但讲得确实精彩,其中谈到了移动Web开发的方方面面,我从中学到了很多尚未悉知的东西。但在这里我们不讨论其他的东西,只跟大家分享一个关于IE的case。

我们知道,在移动Web开发中,从事件角度来讲,大致可以分为两个派别:一将触屏事件和鼠标事件分开,二将触屏事件和鼠标事件整合。而微软则是支持将触屏事件和鼠标事件整合为**指针事件**。在事件这方面似乎微软的事件理论更具前瞻性和扩展性,所以Mozilla和Google也正在考虑实现指针事件,但是我们这里也不讲事件的优劣,我们只看IE10、IE11的事件绑定差异。

// IE10、IE11都支持
element.addEventListener(‘MSPointerDown‘, function(ev){}, false);

// 仅IE11支持
element.addEventListener(‘pointerdown‘, function(ev){}, false);

且不说加前缀
ms已经够蛋疼了,还搞出个事件名称驼峰与全小写的区别,这也真是够了。顺便提一句,似乎IE已经声明驼峰事件命名终将会被抛弃。

好了,bug说了,槽也吐完了,我对IE的了解又多了…

最后附上《移动Web手册(双色)》读书笔记

作者博客:百码山庄

时间: 2024-08-28 23:05:51

【原创】我对IE了解得还是太少了的相关文章

全球化让大部分人受益,但是对少受损的人的帮助太少。《反全球化,特朗普崛起的土壤》。4星

<经济学人>的电子刊物<商论>的节选文章.基本都是8-10月刊上的,时效性还比较强.文章基本的特点是言简意赅,基本是观点的概括,没有特别详细的阐述. 本书基本的观点是:全球化对大部分人有益,但是发达国家确实有一些工人受损,目前政府对他们的帮助太少,另外发达国家的一些中产阶级在过去10多年来的收入几乎没有增长. 以下是书中一些信息的摘抄: 1:美国选民用选票表达了对体制的不信任与愤怒,因为他们认为这样的体制只会让一小批精英受益.#26 2:低收入人群的收入花在进口商品上的比例要远大于

你迷茫的原因在于读书太少而想的太多!!!

你迷茫的原因在于读书太少而想的太多 如果你也是觉得迷茫 一位正在读高一的在校学生通过新浪微博找到我,私信里跟我说他看了我的文章,觉得挺触动的,他还说他现在很迷茫,想让我帮帮他. 文章来源网络 我给他的回复并不算多,但是依然表达了感谢,并且给他提供了自己当初的方法:当我坚持不下去的时候,就想一想最亲或者是最爱的人,他们在时时刻刻偷偷注视着我,我不能让他们失望.其实说实话,我当年读高中的时候并没有他所描述得那般迷茫,只是到了大学才一发不可收拾的,所以坦白说我并没有这方面的经验,也不知道这样的方法是否

运动想象数据集样本太少,SAE训练过拟合严重

Before Finetuning Train Accuracy: 51.190% After Finetuning Train Accuracy: 100.000% Before Finetuning Test Accuracy: 46.429% After Finetuning Test Accuracy: 50.893% 来自为知笔记(Wiz)运动想象数据集样本太少,SAE训练过拟合严重

想得太多,做的太少

2012年来到了天津,开始了了四年的大学之旅.选了一个折中的专业,其中包含计算机的大专业.当然大二分专业的时候选了计算机专业.大学四年学计算机的时间比我预想的时间要少,不过还是有很多的时间"浪费"在了计算机上面.对于计算机的学习,随着学习一步步的深入,才发现自己是一个对于计算机什么都不懂得门外汉.但是还是想把时间浪费在这些上面.和计算机交流很简单,我的理解就是如果你做的正确,计算机会给你一个正确的反应.如果错误,会有一个错误的警告.把事情想得很简单,这也就是为什么好多程序员不太善于表达

它全身都是宝,比人参还有用,可惜知道的人太少

它全身都是宝,比人参还有用,可惜知道的人太少 2016-04-24 都市报道扩大版  红薯叶的秘密 ★能够预防贫血 红薯叶里富含人体所需的铁以及维生素A,C,E,每天吃一点就能预防贫血症状. ★能够预防高血压 富含丰富的钾,有助于控制血压,预防高血压. ★能够促进乳汁分泌 就像猪脚汤.鲫鱼汤一样,它能够很好地帮助孕妇促进乳汁分泌,是很好的催乳健康食品. ★能够排解毒素 富含丰富的叶绿素,能够很好的净化人体血液,排出毒素. ★能够改善便秘 它含有丰富的膳食纤维,可以帮助肠胃蠕动,有利于预防"便秘及

《不是世界不好,而是你见得太少》读后感

上图,故事背景:看到知乎某辣酱贴,瞬间又勾起了自己对于辣酱的追求,然后照那帖子买了不少辣酱,一一品尝.发现,居然还是熟悉的老干妈最好.而其他的很多辣酱,由于每个人的喜好不同,别人认为好吃的,你不一定觉得好吃.当然那帖子,可能软广特别多.而且最打击的,就是,在淘宝上买了不少.发现,居然楼下的小超市,居然都有.价格还更便宜,动摇了我对淘宝的信仰.不能太宅不能太宅.之后自己也分析出,为什么老干妈能卖的那么火,辣酱是一种很私人的东西,不能和别人分享.所以一段时间偃旗息鼓,不买辣酱了.额 或者说是 不追求

想的太多,做的太少

不管在什么地方工作,请记住: 工作不养闲人,团队不养懒人,入一行,先别惦记着赚钱,先学会如何让自己变的值钱. 赚不到钱赚知识,赚不到知识赚经理,赚不到经历赚阅历. 以上说那个都赚到了也就不可能赚不到钱了, 只有先改变自己的态度,才能改变自己的人生的高度 让一个人迷茫的原因只有一个,那就是本该拼搏的年纪,想的太多,做的太少

3星|丹尼尔&#183;平克《驱动力》:内在驱动力更有利于个人与企业的业绩。书有点旧了,案例太少

驱动力(经典版) 作者名气比较大.英文原版是2010年出版的.主要的思想是:胡萝卜加大棒式的激励,效果弱于员工/学生/儿童内心的驱动力.全书给出许多实验研究结果和少许的实际案例来证明. 目前看这种管理思想比较常见,算是常识了.另外企业的案例太少. 总体评价3星.有一定参考价值. 以下是书中一些内容的摘抄,#号后面是kindle电子版中的页码: 1:尽管如此,本书2010年在美国率先出版时,我已经做好了迎接一场口水大战的准备.毕竟这本书的核心思想与美国当时盛行的商业智慧相悖.无论企业规模大小,大多

类模板 &quot;std::array&quot; 的参数太少

在从VS2013项目迁移过来的时候,用的array<System::String ^> ^出现错误错误(活动)    E0442    类模板 "std::array" 的参数太少 这时候是因为C++ 11引入了std::array 向量变量,导致的模糊不清,这时候只要指定,为cli下即可 cli::array<System::String ^> ^ 原文地址:https://www.cnblogs.com/badprogrammer/p/9928356.htm