V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
aladd
V2EX  ›  程序员

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

  •  
  •   aladd · 2014-01-08 01:07:32 +08:00 · 3818 次点击
    这是一个创建于 3978 天前的主题,其中的信息可能已经有所发展或是发生改变。
    总看见什么一行代码解决IE系列兼容性的帖子,真实性? 求技术宅解答。
    那些可以强制IE6 7 8统一代码效果的JS,真的是有效的么???
    16 条回复    1970-01-01 08:00:00 +08:00
    otakustay
        1
    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
        2
    tokki  
       2014-01-08 01:18:11 +08:00 via iPhone   ❤️ 2
    有效的 alert('you can download chrome here http://google.com/chrome')
    ianva
        3
    ianva  
       2014-01-08 01:20:50 +08:00
    呵呵
    sapjax
        4
    sapjax  
       2014-01-08 09:41:19 +08:00
    @otakustay p元素里面不能嵌套任何块元素,这是在所有浏览器都是这样的啊
    hkongm
        5
    hkongm  
       2014-01-08 09:46:14 +08:00
    @sapjax 对的。
    yangg
        6
    yangg  
       2014-01-08 10:08:06 +08:00
    @tokki 这个明显没有解决,不用代理到这个地址下载chrome明显很难,没有半个小时估计下载不下来。
    otakustay
        7
    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
        8
    housne  
       2014-01-08 10:44:33 +08:00
    @otakustay 请先理解下 html 标签的语义 p 表示的是文字段落, div 表示块级,p 里面是不能插入div , 很多人抱怨 ie6 是因为标准没有理解清楚
    otakustay
        9
    otakustay  
       2014-01-08 13:14:16 +08:00   ❤️ 1
    首先我对语义的研究自认为是没问题的,你要说标准那就说说标准,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
        10
    sapjax  
       2014-01-08 14:22:45 +08:00
    @otakustay 学习了,之前没有注意到ie6下p嵌套div会直接挂掉...
    mtmzorro
        11
    mtmzorro  
       2014-01-08 15:45:45 +08:00
    贴个 “一行代码” 出来 观摩下。。。。 同意一楼的 想~都~别~想
    alay9999
        12
    alay9999  
       2014-01-08 18:50:05 +08:00
    一行代码可以引入个 JS 了……
    wsph123
        13
    wsph123  
       2014-01-08 22:00:11 +08:00 via iPhone
    @otakustay 程序员就该这样!
    Mcatt
        14
    Mcatt  
       2014-01-09 09:39:27 +08:00
    楼主看错了吧,一行代码检查IE浏览器就有,哪有一行代码能解决兼容性问题。。
    有那么厉害的代码,我们前端就不用每天花那么多时间去处理兼容性问题了。
    jackmasa
        15
    jackmasa  
       2014-01-09 09:50:26 +08:00   ❤️ 1
    @wsph123 ....
    wsph123
        16
    wsph123  
       2014-01-09 15:43:08 +08:00 via iPad
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1987 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:16 · PVG 00:16 · LAX 08:16 · JFK 11:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.