换个眼界看IE,它真的有那么可恶吗?
一说到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,它真的有那么可恶吗?的更多相关文章
- 换种眼光看Spring之bean是怎么诞生的(一)
Java的世界里处处存在了对象,有时候换一种眼光往往会给自己带来与之前大不一样的理解. 一个对象的出现离不开字节码,拿classforname来讲,classforname("...&quo ...
- 8个问题看你是否真的懂 JS
文章转载: https://juejin.im/post/5d2d146bf265da1b9163c5c9#heading-20 原文地址: https://dev.to/aman_singh/so- ...
- Intellij IDEA 的使用(创建项目、导入项目、同时部署多个项目、JRebel)等常见eclipse、myeclipse换idea必看
第一篇:Intellij IDEA 的使用 1.黑色主题 中文乱码修改 2.WEB项目的部署 以及自动编译 3.多项目的同时部署 4.相关插件提高工作效率 1.JRebel插件 实现热部署 2.Tas ...
- 【HIVE & Spark】将hive引擎换成Spark,运行速度快!怎么换?请看本文
本教程仅仅是使用spark,能在hive用就行. 1.下载Spark; 2.WinSCP上传spark压缩包到虚拟机: 3.tar -zxvf spark-2.3.3-bin-without-hado ...
- 提问的智慧——其实你真的不会提问!(转)
在黑客世界里,当提出一个技术问题时,你能得到怎样的回答?这取决于挖出答案的难度,同样取决于你提问的方法.本指南旨在帮助你提高发问技巧,以获取你最想要的答案. 首先你必须明白,黑客们只偏爱艰 ...
- [浪风分享] PHP开发必看 我现在是这样编程的
我在做什么 曾经,我试过接到一些需求.一眼带过后,脑袋马上随着高昂的斗志沉溺在代码的世界中 ,马不停蹄地敲着键盘直到最后测试的完成.我从思绪中恢复过来,乍一看自己写的功能,和需求差了十万八千里,我TM ...
- 程序员如何在VsCode上看基金?
一 我是一个程序员. 代码是我的禁锢,基金是我的自由. 打破禁锢,奔向自由,也许只差几个定投. 有人说,买基金一定要心态好,要学会风险对冲,把8成的钱全仓买基金,剩余2成买意外身亡险,基金大涨就赚,基 ...
- 你真的会玩SQL吗?透视转换的艺术
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- 你真的会玩SQL吗?透视转换
原文:你真的会玩SQL吗?透视转换 透视转换是一种行列互转的技术,在转过程中可能执行聚合操作,应用非常广泛. 本章与 你真的会玩SQL吗?数据聚合 内容比较重要,还涉及到 你真的会玩SQL吗?Case ...
随机推荐
- 安装 Git 并连接 Github
下载安装 Git, 下载地址:https://git-scm.com/download/win . 在命令行中输入 git 测试 Git 是否安装成功. 在桌面鼠标右击打开 Git Bash Here ...
- C++学习笔记-继承
类之间可以建立联系,这就使得类可以有某种关系 类之间的关系 has-A:包含关系,一个类使用另一个已经定义好的类的数据 uses-A:使用关系,友元或者对象参数传递 is-A:是的关系,这就是继承,具 ...
- flask_script
Flask Script扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任 ...
- c++ string详解 assign
assign方法可以理解为先将原字符串清空,然后赋予新的值作替换. 返回类型为 string类型的引用.其常用的重载也有下列几种: a. string& assign ( const stri ...
- LeetCode-求最长回文子序列
题目:给定一个字符串,求它的最长回文子串 /*求最长回文子串,以当前字符为中心,向两边同时拓展*/ string longestPalindrome(string s) { int len = s.l ...
- poj1050-最大子矩阵(dp)
链接:http://poj.org/problem?id=1050 题意:给定n*n的矩阵,求和最大的子矩阵. 思路:我们将二维矩阵降维至一维,即将第i行到第j行的所有列压缩成一行,我们可以在线性时间 ...
- 手把手教你用 Strace 诊断问题
早些年,如果你知道有个 strace 命令,就很牛了,而现在大家基本都知道 strace 了,如果你遇到性能问题求助别人,十有八九会建议你用 strace 挂上去看看,不过当你挂上去了,看着满屏翻滚的 ...
- Eclipse中导入Maven Web项目并配置其在Tomcat中运行
今天因为实习的关系需要讲公司已经开发的项目导入进Eclipse,而公司的项目是用Maven来构建的所以,需要将Maven项目导入进Eclipse下. 自己因为没有什么经验所以搞了得两个多小时,在这里和 ...
- 从入门到自闭之Python while如何使用
while 循环 while 条件: 循环体 终止循环的两种办法: 改变条件 break break和continue的用法: break 用法:打破当前循环,(终止当前循环),所处位置在循环 ...
- python-day37(正式学习)
前景回顾 抢票系统的代码优化,使用了Lock类 from multiprocessing import Process,Lock import os,time,json with open('user ...