zoukankan      html  css  js  c++  java
  • html&js 在firefox与IE中呈现存在差异的解决方法总结

    由于现在使用firefox的用户占据了比较小的一定比例,所以现在在作web开发的时候时常需要考虑占这一很小比例的用户而考虑DHTML在firefox的呈现是否与预想一致,因为IE所遵循的标准并不是严格的W3C的标准所以IE和ff在最终呈现效果方面可能会存在一定差异。

    下面列出我遇到的一些 两者之间在存在差异的地方与大家共享,不是很全面,希望大家多多指正。

    1.padding 的问题
    大家可以搜索一下关于padding在ff中的问题,为什么IE和firefox对padding有不同的效果?firefox会减去横向的padding,而ie确不减去。
    下面是从别的地方看到的:在Firefox/Mozilla 浏览器中,对象的实际宽度= (margin-left) + (border-left-width) + (padding- left) + width + (padding-right) + (border-right-width) + (margin-right);而在IE/Opera浏览器中,对象的实际宽度 = (margin-left) + width + (margin-right)。

    其实主要的差别就是ff会比ie少2px,所以可以这样定义 padding-left :10px;padding-left:12px!important;
    注意!important需要放在后面

    但是我试验在ff1.5的版本的时候padding的问题已经和ie统一了。原来遇到这个问题试验用的ff是1.07版本的。

    2.display:block的问题
    style.display='none'两者都可以支持,但是='block'在ff下需要替换为=''就可以了

    以下为搜索到的内容
    1. 对象问题
    1.1 Form对象
    现有问题:
    现有代码这获得form对象通过document.forms("formName"),这样使用在IE 能接受,MF 不能。
    解决方法:
    改用 作为下标运算。改为document.forms["formName"]
    备注
    上述的改用 作为下标运算中的formName是id而name

    1.2 HTML对象
    现有问题:
    在 IE 中,HTML 对象的 ID 可以作为 document 的下属对象变量名直接使用。在 MF 中不能。
    document.all("itemName")或者document.all("itemId")
    解决方法:
    使用对象ID作为对象变量名
    document.getElementById("itemId")
    备注
    document.all是IE自定义的方法,所以请大家尽量不使用。
    还有一种方式,在IE和MF都可以使用
    var f = document.forms["formName "];
    var o = f. itemId;

    1.3 DIV对象
    现有问题:
    在 IE 中,DIV对象可以使用ID作为对象变量名直接使用。在 MF 中不能。
    DivId.style.display = "none"
    解决方法:
    document.getElementById("DivId").style.display = "none"
    备注
    获得对象的方法不管是不是DIV对象,都使用getElementById方法。参见1.2


    1.4 关于frame
    现有问题
    在 IE中 可以用window.testFrame取得该frame,mf中不行
    解决方法
    在frame的使用方面MF和IE的最主要的区别是:
    如果在frame标签中书写了以下属性:

    那么IE可以通过id或者name访问这个frame对应的window对象
    而mf只可以通过name来访问这个frame对应的window对象
    例如如果上述frame标签写在最上层的window里面的htm里面,那么可以这样访问
    IE: window.top.frameId或者window.top.frameName来访问这个window对象
    MF:只能这样window.top.frameName来访问这个window对象
    另外,在mf和ie中都可以使用window.top.document.getElementById("frameId")来访问frame标签
    并且可以通过window.top.document.getElementById("testFrame").src = 'xx.htm'来切换frame的内容
    也都可以通过window.top.frameName.location = 'xx.htm'来切换frame的内容

    1.5 窗口
    现有问题
    IE中可以通过showModalDialog和showModelessDialog打开模态和非模态窗口,但是MF不支持。
    解决办法
    直接使用window.open(pageURL,name,parameters)方式打开新窗口。
    如果需要传递参数,可以使用frame或者iframe。

    2. 总结
    2.1 在JS中定义各种对象变量名时,尽量使用id,避免使用name。
    在 IE 中,HTML 对象的 ID 可以作为 document 的下属对象变量名直接使用。在 MF 中不能,所以在平常使用时请尽量使用id,避免只使用name,而不使用id。

    2.2 变量名与某 HTML 对象 id 相同的问题
    现有问题
    在 MF 中,因为对象 id 不作为 HTML 对象的名称,所以可以使用与 HTML 对象 id 相同的变量名,IE 中不能。
    解决方法
    在声明变量时,一律加上 var ,以避免歧义,这样在 IE 中亦可正常运行。
    此外,最好不要取与 HTML 对象 id 相同的变量名,以减少错误。
  • 相关阅读:
    firewall&iptables
    Linux压缩&解压缩
    Centos7.4 修改selinux错误导致服务器起不来
    Anaconda 安装 pytorch报错解决方法
    Java8 map value排序
    SparkStreaming获取kafka数据的两种方式:Receiver与Direct
    vim常用的骚操作
    http server
    转:WinInet, WinHttp, Winsock, ws2_32的区别和联系
    windows xp 驱动开发(三)DDK与WDK WDM的区别
  • 原文地址:https://www.cnblogs.com/s1ihome/p/538533.html
Copyright © 2011-2022 走看看