总看见什么一行代码解决IE系列兼容性的帖子,真实性? 求技术宅解答

2014-01-08 01:07:32 +08:00
 aladd
总看见什么一行代码解决IE系列兼容性的帖子,真实性? 求技术宅解答。
那些可以强制IE6 7 8统一代码效果的JS,真的是有效的么???
3710 次点击
所在节点    程序员
16 条回复
otakustay
2014-01-08 01:15:09 +08:00
真相:想~都~别~想
顶多解决一些常见的,比如png背景啊,fixed定位啊,double margin啊,那些坑死人的细节想解决是没门的
比如这种问题:IE6下<head>元素里最后一个元素是<base>时,使用head.appendChild添加元素会变成这个<base>的子元素
很经典的BUG,但一行代码能解决?就算能重写head.appendChild,能保证在这行代码之前没有进行appendChild操作吗
更别说IE6的嵌套document.write输出<script>标签执行顺序混乱,<p>元素里不能套<div>元素,文档未加载完时body.appendChild可能导致出错这些奇葩了
tokki
2014-01-08 01:18:11 +08:00
有效的 alert('you can download chrome here http://google.com/chrome')
ianva
2014-01-08 01:20:50 +08:00
呵呵
sapjax
2014-01-08 09:41:19 +08:00
@otakustay p元素里面不能嵌套任何块元素,这是在所有浏览器都是这样的啊
hkongm
2014-01-08 09:46:14 +08:00
@sapjax 对的。
yangg
2014-01-08 10:08:06 +08:00
@tokki 这个明显没有解决,不用代理到这个地址下载chrome明显很难,没有半个小时估计下载不下来。
otakustay
2014-01-08 10:18:07 +08:00
@sapjax 多数浏览器是“不希望你这样做,你要是真做了我给你修复一下”,于是<p><div></div></p>其实也是OK的,但是IE6会直接报错挂掉……
document.getElementsByTagName('p')[0].appendChild(document.createElement('div'))
housne
2014-01-08 10:44:33 +08:00
@otakustay 请先理解下 html 标签的语义 p 表示的是文字段落, div 表示块级,p 里面是不能插入div , 很多人抱怨 ie6 是因为标准没有理解清楚
otakustay
2014-01-08 13:14:16 +08:00
首先我对语义的研究自认为是没问题的,你要说标准那就说说标准,p里面不能套div不是因为p是“文字段落”而div是“块级”,HTML里没有“块级”这个概念,那是CSS的概念。p是phrasing content,翻译为“文字段落”并不精确但也恰当,而div是flow content,无论如何不该翻译为“块级”,至少也是“流式内容”。标准的描述应该是这样:p的内容模型只允许phrasing content作为内容出现,而div是flow content因此无法作为p的内容,导致HTML在嵌套上并不合法。
但是,请注意2点:
1. HTML规范里本身就有一个东西叫“容错性”,你可以参考下HTML的标准文档,有专门一上章节会去说mismatched tag如何处理
2. 再往细地说,使用js来往p里加一个div,这事是DOM管的,不是HTML管的,HTML只是个文本标记语言而已。DOM有提到要符合HTML的嵌套,且不符合规则时应该抛出DOMException,异常内容为HIERARCHY_REQUEST_ERR,那么IE6抛异常了吗,符合标准了吗,就这点上都足够我抱怨他
最后,作为浏览器本身,你不认为无论开发者出了啥错,至少他自己不能崩溃吗?你可以友好地提示,可以页面渲染错误,甚至页面完全不渲染,但是你啪的一下弹个框,点了确定你把自己关了,这样合适吗?
这就好比用户输入一个超长的用户名,你说你后端代码直接就会挂掉,服务器要重启,但这是用户的问题是用户没理解清楚系统对输入的限制,不能怪后端,这能说得通吗?因此这一点上我坚持认为是IE6的一个BUG
sapjax
2014-01-08 14:22:45 +08:00
@otakustay 学习了,之前没有注意到ie6下p嵌套div会直接挂掉...
mtmzorro
2014-01-08 15:45:45 +08:00
贴个 “一行代码” 出来 观摩下。。。。 同意一楼的 想~都~别~想
alay9999
2014-01-08 18:50:05 +08:00
一行代码可以引入个 JS 了……
wsph123
2014-01-08 22:00:11 +08:00
@otakustay 程序员就该这样!
Mcatt
2014-01-09 09:39:27 +08:00
楼主看错了吧,一行代码检查IE浏览器就有,哪有一行代码能解决兼容性问题。。
有那么厉害的代码,我们前端就不用每天花那么多时间去处理兼容性问题了。
jackmasa
2014-01-09 09:50:26 +08:00
@wsph123 ....
wsph123
2014-01-09 15:43:08 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/96089

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX