一说到IE我想很多web小伙伴都避之不及,对于IE经验不足的同学可以说更是恨之入骨,撕心裂肺般的烦恼与气愤?,被折磨的不要不要的。我感同身受,去年的我的生日愿望就是,我希望IE浏览器在这世界上没有一个用户

这篇文章是一个追溯历史并收集IE在web上的贡献地位的非干货性文章,如果有幸被转发分享到其他平台(非SF),请到segmentfault来查看,或者关注我的github。同时,我也希望大家提出文章中的不足,加以补充,万分感谢?。

事件冒泡

在 web3 时代(netspace3 & ie3),就已经有了事件这个东东,当时是为了减少服务端的压力,后来开发者发现了一个很有意思的问题,就是一个在一个同心圆中,如果触发事件,那应该怎么办呢?

IE依然秉承着优良传统,不管其他人怎么搞,我先来解决一下,之后也就出现了事件冒泡的这个概念。

随之,netspace网景公司也提出了自己的解决方式,正好与IE大相反(有可能这哥俩谁都不服,专门对着干),它提出了事件捕获的理论,也就是从外向内直至触发元素,依次触发事件。

虽然现在w3c标准把两者都纳入了规范,但我们大多数还是更偏向于冒泡,所以这个IE的点子不错,算你厉害。

Ajax

上世纪90年代所有的网页都是单独的文本页,每次交互都需要去向服务器请求新的页面来展示信息,随着web的不断发展访问量不断增加,服务器承受的越俩越多,当时就用java来嵌入了一个小程序(Java Applet),它可以动态更新页面内容,个人认为,java小程序过于笨重而且为了保持平台的语言统一,后来IE的Outlook Web Access团队把了iframe嵌入到HTML实现了局部刷新,不久就他们就发布了客户端HTTP请求在当时,这是第一个可以不用通过刷新页面去主动发送HTTP请求的技术,并迅速应用到了IE4之中。时至今日,从ActiveXObject,XHR,Fetch,技术一直在向前走,但始终离不开AJAX的概念,所以IE起了个好头(就是没找)。

标准模式与混杂模式

IE5.5最先使用了标准模式与混杂模式,可能是因为自身(你懂的)原因,面对规范与自己的低版本浏览器(与规范差异较大,如果完全支持规范,用户如果更新浏览器完全崩溃了)不能互融,所以这部分交给了开发者来处理,让我们来选择以什么样的浏览器模式处理。

IE做出这个决定也是别无它法,如果脱离了规范就真的成为独脚兽了,如果支持,还得照顾低版本浏览器,所以这个方法无疑是最好的。也因为这样,当时的其他浏览器,IE 打了个头,其他浏览器纷纷效仿,这也算IE打了个头提出了不同规范下的兼容模式。

首个使用Css

IE6是第一个完全支持css-Level1的,它支持

  • (class,id)selectors,
  • descendant selectors,
  • a:-only pseudo-selectors

详情请看这篇文章。

webApp

微软早在IE3的时候已经开始把网页集成在desktop上了,正是因为这件事情,引起了美国政府的极度不满,从而引发了美国诉微软案,虽然确实有点垄断,图谋不轨的那种感觉,但从用户的使用角度来说这确实是一个很好的想法,过去这么多年了,我们不还是在追求着SPA,PWA,想要更接近原生应用一些,可是这些Feature IE早就已经实践过了,再看看从以前的服务器端渲染,经历了各式各样的新型玩法之后,发现了新大陆"SSR",不由暗自感叹,技术就是一个圈,如果没有本质上的突破,就一直绕着这圈跑,造轮子,造轮子,造轮子。

真心话

其实,IE最大的好处就是可以下载 Firefox 与 Chrome 浏览器,哈哈,不管对错,它为web的发展贡献了这么多,即便以前对兼容问题比较偏执,但现代版的IE一直在跟随W3C的脚步,希望有一天可以像 Gecok 与 Blink 一样高效积极支持规范。如果大家知道什么IE的特殊之处敬请说来

换个眼界看IE,它真的有那么可恶吗?的更多相关文章

  1. 换种眼光看Spring之bean是怎么诞生的(一)

    Java的世界里处处存在了对象,有时候换一种眼光往往会给自己带来与之前大不一样的理解. 一个对象的出现离不开字节码,拿classforname来讲,classforname("...&quo ...

  2. 8个问题看你是否真的懂 JS

    文章转载: https://juejin.im/post/5d2d146bf265da1b9163c5c9#heading-20 原文地址: https://dev.to/aman_singh/so- ...

  3. Intellij IDEA 的使用(创建项目、导入项目、同时部署多个项目、JRebel)等常见eclipse、myeclipse换idea必看

    第一篇:Intellij IDEA 的使用 1.黑色主题 中文乱码修改 2.WEB项目的部署 以及自动编译 3.多项目的同时部署 4.相关插件提高工作效率 1.JRebel插件 实现热部署 2.Tas ...

  4. 【HIVE & Spark】将hive引擎换成Spark,运行速度快!怎么换?请看本文

    本教程仅仅是使用spark,能在hive用就行. 1.下载Spark; 2.WinSCP上传spark压缩包到虚拟机: 3.tar -zxvf spark-2.3.3-bin-without-hado ...

  5. 提问的智慧——其实你真的不会提问!(转)

    在黑客世界里,当提出一个技术问题时,你能得到怎样的回答?这取决于挖出答案的难度,同样取决于你提问的方法.本指南旨在帮助你提高发问技巧,以获取你最想要的答案.       首先你必须明白,黑客们只偏爱艰 ...

  6. [浪风分享] PHP开发必看 我现在是这样编程的

    我在做什么 曾经,我试过接到一些需求.一眼带过后,脑袋马上随着高昂的斗志沉溺在代码的世界中 ,马不停蹄地敲着键盘直到最后测试的完成.我从思绪中恢复过来,乍一看自己写的功能,和需求差了十万八千里,我TM ...

  7. 程序员如何在VsCode上看基金?

    一 我是一个程序员. 代码是我的禁锢,基金是我的自由. 打破禁锢,奔向自由,也许只差几个定投. 有人说,买基金一定要心态好,要学会风险对冲,把8成的钱全仓买基金,剩余2成买意外身亡险,基金大涨就赚,基 ...

  8. 你真的会玩SQL吗?透视转换的艺术

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  9. 你真的会玩SQL吗?透视转换

    原文:你真的会玩SQL吗?透视转换 透视转换是一种行列互转的技术,在转过程中可能执行聚合操作,应用非常广泛. 本章与 你真的会玩SQL吗?数据聚合 内容比较重要,还涉及到 你真的会玩SQL吗?Case ...

随机推荐

  1. golang可见性规则(公有与私有,访问权限)

       Go语言没有像其它语言一样有public.protected.private等访问控制修饰符,它是通过字母大小写来控制可见性的,如果定义的常量.变量.类型.接口.结构.函数等的名称是大写字母开头 ...

  2. Nginx动态添加模块 平滑升级

    已经安装好的Nginx动态添加模块 说明: 已经安装好的Nginx,需要添加一个未被编译安装的模块,需要怎么弄呢? 这里已安装第三方nginx-rtmp-module模块为例 nginx的模块是需要重 ...

  3. virtualenv以及virtualenvwrapper的安装和使用

    Virtualenv 安装 安装前最好保证pip为最新版本: python -m pip install -U pippip install virtualenv 创建新的环境 virtualenv ...

  4. linux下Eclipse进行C编程时动态链接库的生成和使用

    引用 http://linux.chinaitlab.com/soft/864157.html 欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 一.创建动态链接库1.创建 ...

  5. Centos磁盘空间不足,找不到占用文件

    服务器报警,系统"/"空间不足,但找不到哪些文件占用. 1.使用du -sh *,层层目录查看依然找不到 2.使用"lsof / | grep -i delete&quo ...

  6. 关于js查找和筛选和循环的几种方式

    find(); find() 方法返回通过测试(函数内判断)的数组的第一个元素的值. find() 方法为数组中的每个元素都调用一次函数执行: 当数组中的元素在测试条件时返回 true 时, find ...

  7. Redis 以及 Python操作Redis

    Redis Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis有以下特点: -- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可 ...

  8. 【C++】A trick I learned:put boilerplate code into constructor of a struct

    I learned this trick from hitonanode's submission on AtCoder. The trick is like struct fast_ios { fa ...

  9. Known Notation括号匹配类问题(2014年ACM/ICPC 亚洲区域赛牡丹江)

    题意: 给你数字或 * 的串,你可以交换一个*和数字.在最前面添1.在一个地方插入*,问你使串满足入栈出栈的(RNP)运算法则. 思路: 引用:https://blog.csdn.net/u01158 ...

  10. python网络编程——使用UDP、TCP协议收发信息

    UDP UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送. UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内. UDP ...