FF 有一个特性至少IE是没有的即:Window HTMLDocument HTMLElement Event 这些对象我可以用 .prototype 添加自己的成员方法,可以用 .prototype.__defineSetter__ 和 .prototype.__defineSetter__ 添加自己的成员属性,IE就没有这种可扩充的接口。在FF里遇到不爽的功能自己可以 repair 或者 add,但IE绝对不行。

解决方案 »

  1.   

    不过,老大,你说的功能,用HTC好象完全可以实现啊,而且比__defineSetter__这种方式更直接一些.
      

  2.   

    <div id="div1" style='background-color:tan'>aaa<b>bbb</b>ccc</div><SCRIPT LANGUAGE="JavaScript">
    <!--
    if(typeof(HTMLElement)!="undefined" && !window.opera)
    {
      HTMLElement.prototype.__defineGetter__("outerHTML",function()
      {
        var a=this.attributes, str="<"+this.tagName, i=0;for(;i<a.length;i++)
        if(a[i].specified) str+=" "+a[i].name+'="'+a[i].value+'"';
        if(!this.canHaveChildren) return str+" />";
        return str+">"+this.innerHTML+"</"+this.tagName+">";
      });
      HTMLElement.prototype.__defineGetter__("canHaveChildren",function()
      {
        return !/^(area|base|basefont|col|frame|hr|img|br|input|isindex|link|meta|param)$/.test(this.tagName.toLowerCase());
      });
    }alert(document.getElementById("div1").outerHTML);
    //-->
    </SCRIPT>比如这样在 FF 里可以自己扩充  .outerHTML 属性,但在 IE 里却无法这样扩充对象的属性的
      

  3.   

    <PUBLIC:COMPONENT tagName="test1"> 
    <ATTACH EVENT="oncontentready" ONEVENT="fnInit()"/> 
    <PUBLIC:PROPERTY  GET = "getOutHtml" NAME = "outHtml" PUT = "setOutHtml"/><SCRIPT LANGUAGE="JavaScript"> 
    function fnInit() 



    function getOutHtml()
    {
    return element.outerHTML
    }
    function setOutHtml( v )
    {
    element.outerHTML = v ;
    }
    </SCRIPT> 
    </PUBLIC:COMPONENT> 老大,你说的那个我知道的.我也知道它能使每一个节点都拥有这个属性.(也算是FF的一个小优点吧)
    但我恰恰想说的,用户在大多数时候并不需要扩展每个节点的属性和方法,而是需要像HTC这样的组件化的概念.
    像上面这样方便而对像化的组件功能,FF有吗?另外,梅老大你的技术我是很佩服的,但偶觉得没必要在一些细节上纠缠太多.
    总体上来看,从功能的角度说,FF和IE4是一个档次,和IE5无法比较,这个结论想来是没问题的.
    (也许吧,FF也有一些自己特有而IE没有的良好功能,毕竟它借鉴了微软的许多经验.但这是不足以影响整体评价的,呵呵.)
      

  4.   

    mwjx() 
    ---------------
    赞成你的观点:"做产品有很多实际情况,标准只是一个方向,谁也不可能说完全照着标准写".我是想说,FF太不诚实了,明明是功能差,非要找借口,归咎于他们要"按W3C"标准.
    呵呵.
      

  5.   

    我并不想说FF有多强大,说实话,IE的功能是所有浏览器里最强的。我只不过是在平常的书写过程中“稍微照顾”一下其它的浏览器,让自己的代码移植性强,够健壮,仅此而已。唉,就这么一点小小的偏向就被魔王等人批成了老顽固了。
      

  6.   

    梅老大,并不是我钻牛角尖.实是有感而发.
    最近项目中用了大量的HTC技术,感觉很方便,封闭性也好.但在作之前就有人提出FF和W3C的问题,好在后来发现FF的用户非常少.但如果真在照顾FF,恐怕就要另开发一套代码了.呵呵.
    也许有人会说,HTC的问题还能委屈自己(会增加多少工作量并降低多大的效率呢?),那VML的项目怎么办?而且,偶最大的担心是,“稍微照顾”一下其它的浏览器的策略,恐怕也只是权宜之计罢了.
    FF也要进步的,这么发展下去,早晚会回到到微软大战网景的时代,同样的功能,开发两套代码.假如W3C足够合理,还会出现这种情况吗?
    FF还会有这种借口吗?魔王说话的措辞方式我颇不赞成,但他的态度我觉得很可取:
    与其消极地去兼容FF和W3C,不如去抵制他们,让他们去适应合理的东西.呵呵.
      

  7.   

    能照顾的还是照顾一下好,我最近也在看这个东东,发现微软的很多东西不能在FF上用。很恼火。但换一个写法,竟然在IE和FF都能用。既然完成的功能是一样的,为什么微软还要写些不兼容的代码来害人?真不明白他们为什么不用W3C的标准来写。如果是一些特殊的功能,别的浏览器达不到的功能,那也罢了。可就是一些简单的功能,它们的MSDN库都不能用标准来写。很不满!!!
      

  8.   

    楼上,是先有IE,再有W3C标准和FF的.这就要反过来问了:
    为什么W3C一定要作成这样呢?
    为什么FF一定要给程序员的工作增加无谓的负担呢?
      

  9.   

    The W3C was founded in October 1994 to lead the World Wide Web to its full potential by developing
      

  10.   

    Document Object Model (DOM) Level 1 Specification (Second Edition)
    Version 1.0
    W3C Working Draft 29 September, 2000W3C的DOM标准板的的确确是晚于IE的,呵呵.
      

  11.   

    像上面这样方便而对像化的组件功能,FF有吗?-----------------------@xishanlang2001(西山狼2000) Mozilla有XBL来定义behavior的<binding>
    <constructor>
    <![CDATA[
    script to do
    ]]>
    </constructor>
    <binding>
      

  12.   

    在绑定事件或者属性就是-moz-binding:url(aaa.xbl#id);
      

  13.   

    多谢楼上指教和指正!在网上查了一下,这个东东的思路好象和HTC很相似.
    不知哪个更好用一点,呵呵.不过,这东东并不是W3C标准的呀.........
    这下偶可更坚定自己的信心了:如果FF真发展起来的话,咱们WEB程序员可真要回到网景时代了:同一个功能,写两套代码了.
    不知楼上是否同意?偶也更坚定自己的观点了:FF哪里是遵循W3C标准,W3C以后的好功能,它不是也开发了很多的嘛.
    所谓遵循W3C标准,只是它为了掩饰自己功能不足的一个幌子和噱头罢了.
      

  14.   

    FireFox是垃圾,这是肯定的了
    我前台页面只用了两个js,当然代码有一千多行,但改了好几天了,还没有搞定。
    不过FF也做得比较牛了,大部分代码都支持了,一开始改起来还是很爽的,但某些功能硬是不支持,可就惨了,现在碰到的是outerHTML和event。还好event是扩展用的,但outerHTML一定要用到,所以还在找高手问。但我写的程序,后台管理方面肯定不可能考虑FF了,因为有些是根本就是不可能做到的,还有不少会浪费我的好多时间。另外使用outerHTML时,FF它并没有提示出错,我以为它是支持的,害得我找了好长时间的原因,看来FF真够不诚实的。
      

  15.   

    XBL是Mozilla与w3c,他们之间是有关系的,详细的资料你可以到w3c上看xbl篇。@ xishanlang2001(西山狼2000) 
    并非用两套代码,事实上,以htc定义的代码,你仔细的看看,是否是XML的格式呢?(看看你上面写的htc,把头部加上<?xml version="1.0" encoding="utf-8"?>,再把script中加入CDATA,以这样来看的话,两者可以有共通的代码,也就是我们不一定要用两套(一种htc,一种xbl来实现),事实上这两套的实质代码都是一样的,只是定义不同而已,由此可见,定义起来并不麻烦。而事实上,也是可以实现。P.S
    如果要兼容的话,一般情况下也不建议使用xbl或者htc,
    毕竟兼容性这东西,在国内来说,如果客户不需要,我们可以不必去搞兼容的事,但在国外,80%以上的程序都是兼容Mozilla的。
    我做程序,想兼容的时候就多想点,只要IE的时候就不管太多。
      

  16.   

    W3C不承认HTC,真是从技术角度出发吗?
    想来也只是一种政治策略,想用这种方式抵制微软罢了.
    因为,它的标准是后于浏览器而出的,又不想被微软牵着鼻子走.于是呢,神仙打仗,我等百姓遭灾.就目前的情况来说,已经给许多程序员增加了许多无谓的工作量了.
    正如BlueDestiny(www.never-online.net) 所说,代码是有许多相同的地方,可以复制粘贴过去的.但那仍是两套代码啊;甚至或者放弃HTC这样好用的功能,可这将使开发效率、执行效率可多少折扣呢?最让人担心的还在后面,打个夸张的比方:如果哪天FF觉得outerHTML这个属性好用,自己出一个功能相同的东西叫outerHTML2,那你的代码怎么办?
    可现在的HTC和XBL不就是这样的逻辑吗?
    而且,出于政治因素,W3C说不定还会把outerHTML2放到标准里去,那你的代码又怎么办呢?
      

  17.   

    感觉跟联通拿cdma低辐射做文章是一样的
      

  18.   

    这个话题(Mozilla和IE)其实大可不必这么去追究的,IE有它的功能(opener, modalDialog, outerHTML, expresstion),Mozilla有它的用法,DOM2, CSS2, CSS3。假如客户要求你的测试必须通过Mozilla,那你肯定也是没有办法。而现在大多数客户,也许连Mozilla还不知道是什么的时候,所以兼容Mozilla与否完全看自己吧。就像有的人兼容浏览器还会注意到IE5.0,这样的人也是在少数呀,而且完全是自己愿意的。我们也没有理由说他们的不是吧建议楼主结贴吧。最后加一点代码上来,如果你的客户要兼容Mozilla,这段代码还是很有作用的。
      

  19.   

    if (Browser.isMozilla) { // set up ie environment for Moz
    extendEventObject();
    emulateAttachEvent();
    emulateEventHandlers(["click", "dblclick", "mouseover", "mouseout",
    "mousedown", "mouseup", "mousemove",
    "keydown", "keypress", "keyup"]);
    emulateCurrentStyle();
    /*emulateDocumentAll();
    emulateElement()
    */
    // It is better to use a constant for event.button
    Event.LEFT = 0;
    Event.MIDDLE = 1;
    Event.RIGHT = 2;
    }
    else {
    Event = {};
    // IE is returning wrong button number
    Event.LEFT = 1;
    Event.MIDDLE = 4;
    Event.RIGHT = 2;
    }
    /*
    * Extends the event object with srcElement, cancelBubble, returnValue,
    * fromElement and toElement
    */
    function extendEventObject() {
    Event.prototype.__defineSetter__("returnValue", function (b) {
    if (!b) this.preventDefault();
    return b;
    });
    Event.prototype.__defineSetter__("cancelBubble", function (b) {
    if (b) this.stopPropagation();
    return b;
    });
    Event.prototype.__defineGetter__("srcElement", function () {
    var node = this.target;
    while (node.nodeType != 1) node = node.parentNode;
    return node;
    });
    Event.prototype.__defineGetter__("fromElement", function () {
    var node;
    if (this.type == "mouseover")
    node = this.relatedTarget;
    else if (this.type == "mouseout")
    node = this.target;
    if (!node) return;
    while (node.nodeType != 1) node = node.parentNode;
    return node;
    });
    Event.prototype.__defineGetter__("toElement", function () {
    var node;
    if (this.type == "mouseout")
    node = this.relatedTarget;
    else if (this.type == "mouseover")
    node = this.target;
    if (!node) return;
    while (node.nodeType != 1) node = node.parentNode;
    return node;
    });
    Event.prototype.__defineGetter__("offsetX", function () {
    return this.layerX;
    });
    Event.prototype.__defineGetter__("offsetY", function () {
    return this.layerY;
    });
    }
    /*
    * Emulates element.attachEvent as well as detachEvent
    */
    function emulateAttachEvent() {
    HTMLDocument.prototype.attachEvent =
    HTMLElement.prototype.attachEvent = function (sType, fHandler) {
    var shortTypeName = sType.replace(/on/, "");
    fHandler._ieEmuEventHandler = function (e) {
    window.event = e;
    return fHandler();
    };
    this.addEventListener(shortTypeName, fHandler._ieEmuEventHandler, false);
    };
    HTMLDocument.prototype.detachEvent =
    HTMLElement.prototype.detachEvent = function (sType, fHandler) {
    var shortTypeName = sType.replace(/on/, "");
    if (typeof fHandler._ieEmuEventHandler == "function")
    this.removeEventListener(shortTypeName, fHandler._ieEmuEventHandler, false);
    else
    this.removeEventListener(shortTypeName, fHandler, true);
    };
    }
    /*
    * This function binds the event object passed along in an
    * event to window.event
    */
    function emulateEventHandlers(eventNames) {
    for (var i = 0; i < eventNames.length; i++) {
    document.addEventListener(eventNames[i], function (e) {
    window.event = e;
    }, true);  // using capture
    }
    }
    /*
    * Simple emulation of document.all
    * this one is far from complete. Be cautious
    */
    function emulateAllModel() {
    var allGetter = function () {
    var a = this.getElementsByTagName("*");
    var node = this;
    a.tags = function (sTagName) {
    return node.getElementsByTagName(sTagName);
    };
    return a;
    };
    HTMLDocument.prototype.__defineGetter__("all", allGetter);
    HTMLElement.prototype.__defineGetter__("all", allGetter);
    }
    function extendElementModel() {
    HTMLElement.prototype.__defineGetter__("parentElement", function () {
    if (this.parentNode == this.ownerDocument) return null;
    return this.parentNode;
    });
    HTMLElement.prototype.__defineGetter__("children", function () {
    var tmp = [];
    var j = 0;
    var n;
    for (var i = 0; i < this.childNodes.length; i++) {
    n = this.childNodes[i];
    if (n.nodeType == 1) {
    tmp[j++] = n;
    if (n.name) {  // named children
    if (!tmp[n.name])
    tmp[n.name] = [];
    tmp[n.name][tmp[n.name].length] = n;
    }
    if (n.id)    // child with id
    tmp[n.id] = n
    }
    }
    return tmp;
    });
    HTMLElement.prototype.contains = function (oEl) {
    if (oEl == this) return true;
    if (oEl == null) return false;
    return this.contains(oEl.parentNode);
    };
    }
    function emulateCurrentStyle() {
    HTMLElement.prototype.__defineGetter__("currentStyle", function () {
    return this.ownerDocument.defaultView.getComputedStyle(this, null);
    /*
    var cs = {};
    var el = this;
    for (var i = 0; i < properties.length; i++) {
    cs.__defineGetter__(properties[i], encapsulateObjects(el, properties[i]));
    }
    return cs;
    */
    });
    }
    function emulateHTMLModel() {
    // This function is used to generate a html string for the text properties/methods
    // It replaces '\n' with "<BR"> as well as fixes consecutive white spaces
    // It also repalaces some special characters
    function convertTextToHTML(s) {
    s = s.replace(/\&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/\n/g, "<BR>");
    while (/\s\s/.test(s))
    s = s.replace(/\s\s/, "  ");
    return s.replace(/\s/g, " ");
    }
    HTMLElement.prototype.insertAdjacentHTML = function (sWhere, sHTML) {
    var df;  // : DocumentFragment
    var r = this.ownerDocument.createRange();
    switch (String(sWhere).toLowerCase()) {
    case "beforebegin":
    r.setStartBefore(this);
    df = r.createContextualFragment(sHTML);
    this.parentNode.insertBefore(df, this);
    break;
    case "afterbegin":
    r.selectNodeContents(this);
    r.collapse(true);
    df = r.createContextualFragment(sHTML);
    this.insertBefore(df, this.firstChild);
    break;
    case "beforeend":
    r.selectNodeContents(this);
    r.collapse(false);
    df = r.createContextualFragment(sHTML);
    this.appendChild(df);
    break;
    case "afterend":
    r.setStartAfter(this);
    df = r.createContextualFragment(sHTML);
    this.parentNode.insertBefore(df, this.nextSibling);
    break;
    }
    };
    HTMLElement.prototype.__defineSetter__("outerHTML", function (sHTML) {
    var r = this.ownerDocument.createRange();
    r.setStartBefore(this);
    var df = r.createContextualFragment(sHTML);
    this.parentNode.replaceChild(df, this);
    return sHTML;
    });
    HTMLElement.prototype.__defineGetter__("canHaveChildren", function () {
    switch (this.tagName) {
    case "AREA":
    case "BASE":
    case "BASEFONT":
    case "COL":
    case "FRAME":
    case "HR":
    case "IMG":
    case "BR":
    case "INPUT":
    case "ISINDEX":
    case "LINK":
    case "META":
    case "PARAM":
    return false;
    }
    return true;
    });
    HTMLElement.prototype.__defineGetter__("outerHTML", function () {
    var attr, attrs = this.attributes;
    var str = "<" + this.tagName;
    for (var i = 0; i < attrs.length; i++) {
    attr = attrs[i];
    if (attr.specified)
    str += " " + attr.name + '="' + attr.value + '"';
    }
    if (!this.canHaveChildren)
    return str + ">";
    return str + ">" + this.innerHTML + "</" + this.tagName + ">";
    });
    HTMLElement.prototype.__defineSetter__("innerText", function (sText) {
    this.innerHTML = convertTextToHTML(sText);
    return sText;
    });
    var tmpGet;
    HTMLElement.prototype.__defineGetter__("innerText", tmpGet = function () {
    var r = this.ownerDocument.createRange();
    r.selectNodeContents(this);
    return r.toString();
    });
    HTMLElement.prototype.__defineSetter__("outerText", function (sText) {
    this.outerHTML = convertTextToHTML(sText);
    return sText;
    });
    HTMLElement.prototype.__defineGetter__("outerText", tmpGet);
    HTMLElement.prototype.insertAdjacentText = function (sWhere, sText) {
    this.insertAdjacentHTML(sWhere, convertTextToHTML(sText));
    };
    }
      

  20.   

    是webfx的代码作者Erik详情参见http://blog.csdn.net/BlueDestiny/archive/2006/06/27/840666.aspx
      

  21.   

    webfx 很牛.....94每次登陆太慢了
      

  22.   

    ff里的outerHTML<HTML><HEAD>
    <STYLE>
    </STYLE><SCRIPT language=JavaScript1.5>
    HTMLElement.prototype.outerHTML getter = function () {
      return getOuterHTML (this);
    }
    function getOuterHTML (node) {
     var emptyElements = {
       HR: true, BR: true, IMG: true, INPUT: true
     };
     var specialElements = {
       TEXTAREA: true
     };
      var html = '';
      switch (node.nodeType) {
        case Node.ELEMENT_NODE:
          html += '<';
          html += node.nodeName;
          if (!specialElements[node.nodeName]) {
            for (var a = 0; a < node.attributes.length; a++)
              html += ' ' + node.attributes[a].nodeName.toUpperCase() +
                      '="' + node.attributes[a].nodeValue + '"';
            html += '>'; 
            if (!emptyElements[node.nodeName]) {
              html += node.innerHTML;
              html += '<\/' + node.nodeName + '>';
            }
          }
          else switch (node.nodeName) {
            case 'TEXTAREA':
              for (var a = 0; a < node.attributes.length; a++)
                if (node.attributes[a].nodeName.toLowerCase() != 'value')
                  html += ' ' + node.attributes[a].nodeName.toUpperCase() +
                          '="' + node.attributes[a].nodeValue + '"';
                else 
                  var content = node.attributes[a].nodeValue;
              html += '>'; 
              html += content;
              html += '<\/' + node.nodeName + '>';
              break; 
          }
          break;
        case Node.TEXT_NODE:
          html += node.nodeValue;
          break;
        case Node.COMMENT_NODE:
          html += '<!' + '--' + node.nodeValue + '--' + '>';
          break;
      }
      return html;
    }
    </SCRIPT><META content="MSHTML 6.00.2800.1555" name=GENERATOR></HEAD>
    <BODY><A href="javascript: alert(document.documentElement.outerHTML); void 0">show document.documentElement.outerHTML </A>| <A href="javascript: alert(document.body.outerHTML); void 0">show document.body.outerHTML </A>| <A href="javascript: alert(document.documentElement.innerHTML); void 0">show document.documentElement.innerHTML </A>| <A href="javascript: alert(document.body.innerHTML); void 0">show document.body.innerHTML </A>
    <FORM name=formName><TEXTAREA name=aTextArea rows=5>JavaScript.FAQTs.com
    Kibology for all.
    </TEXTAREA> </FORM>
    <DIV>
    <P>JavaScript.FAQTs.com </P>
    <BLOCKQUOTE>Kibology for all. <BR>All for Kibology. </BLOCKQUOTE></DIV></BODY></HTML>
      

  23.   

    HTC有时候也颇让人抓狂,偶用htc做的图片按钮,一个页面上才30个左右的这样按钮,当页面载入时,鼠标拼命闪个不停,感觉很不爽,后来还是改用css就不狂闪了。个人认为,同一个htc在一个页面最好不要有多个实例的调用。调用一个一般没问题,多了就会闪鼠标了。我是ie6的,不知道ie7对此是否改善。我一直强烈建议ff支持或提供类似showModalDialog,showModelessDialog,createPopup的功能,这几个实在是太贴心的功能了。据说ff的window.open通过特别参数可以实现类似showModalDialog,showModelessDialog的功能,但是我从网上找的代码试验都未通过,不知道是不是我的ff版本问题,抑或是我的ff配置问题?
      

  24.   

    ie有很多好玩的东东,VML, HTML+TIME, filter样式, zoom样式, scrollbar样式,addToFavorite.....很多很好看或者很方便实用的功能ie的收藏夹是放在Favorites目录底下的n个文件夹和*.URL的文件,而ff等的收藏夹则是一个单一的HTML或XML文件,个人认为各有优缺点。ie7偶还没去体验过呢,偶怕弄了回不到ie6了。
      

  25.   

    FF的里模态框就是window.open(url, "name", "modal=yes");
    createPopup() 也有,是xul
      

  26.   

    cuixiping(无心) ( ) 如果用<@import进来,一个实例与多个实例应该没区别呀。
    呵呵。ttyp和梅老大:
    你们写的FF下的outerHTML确实好用,不过说到标准,innerHTML仍然不是W3C标准里的。(只是FF仍然支持的)
    那是不是可以这么理解:
    可以稍微花一些精力兼容一下FF,但W3C是完全没必要去理会的?
      

  27.   

    魔王立江好聪明啊,一开始拼命诋毁firefox,以引起大家对他的反击,自己乘机学到fireofox的
    技术,现在居然要作兼容firefox的程序。
      

  28.   

    大家都提到Mozilla
    其实IE也是基于Mozilla的,从它的头信息中也有这个可以看出
      

  29.   

    wuyg(平平) ( ) 信誉:100  2006-07-01 22:03:00  得分: 0  
     
       魔王立江好聪明啊,一开始拼命诋毁firefox,以引起大家对他的反击,自己乘机学到fireofox的
    技术,现在居然要作兼容firefox的程序。
      
     回复:我主要是发现我的网站前台程序只有一个js文件实现了所要的所有功能,所以想改进一下这个js文件,让它支持ff,但发现这个工作量是很大的,改一个文件就花了不少时间,不过FF是写得不错,但现在它的这种态度,恐怕失败是肯定的。我做网站到现在,全部只支持IE的,有些还是国外的网站,但还没有碰到客户说我的网站只支持IE,说明FF除了开发人员,根本就没有人用,包括国外也是。
      

  30.   

    以我们中国的思维去思考为什么有标准,为什么要尽量去符合标准是错误的,应该站在欧美的角度去思考才行.但就算你明白欧美的protocol, lisense模式的成功,换到中国来也没有用,中国要能够发展出这种模式,估计还得过上50~100年.
      

  31.   

    就有那么多人不懂好坏,认为标准就要遵守,却不知道好与差,另外谁说国外在尽量去符合标准,要是真是,为何没有软件符合标准。外国人才没有那么笨去守不合理的标准。
    很多人一方面认为外国人是不懂得思考好与差的,另一方面又认为外国比中国先进几十年。难道外国P4电脑几十年就有了,几十年前就有jscript?
      

  32.   

    还有就像linux和windows一样,我一个朋友学linux很好,但找不到好的工作,后来只能在复旦做做linux讲师,另外做些维护工作,可用linux的主都是不想花钱的主,所以研究上花的时间不少,平时赚的钱却一般般。和外面宣传liunx会的人怎么样怎么样,可惜实际不是。
      

  33.   

    google analytics的流量分析,光是我个人的小blog每日firefox的使用人数已经增加到了29%。不能说因为要多开发一套兼容脚本舍弃ff,再说了,w3c七七八八我不是很懂,不过w3c提倡的是高效简单干净的阅读方式。如果要为了花梢增加js方面的枝枝叶叶,w3c可不服务到这个程度,我关注并使用ff主要也是因为对于css模式,更加适合作为一个设计者。firefox各方面是没有ie好。没有高自由的兼容性,正是为了引导设计者们走上正途,为协同团队缔造下一代人。
      

  34.   

    楼上的仁兄:
    什么叫"为了花梢"?网页如果离了脚本,就像作菜没有油盐、画画没有画板一样。
    楼上的仁兄说"w3c七七八八',那咱们举个简单的例子:动网7发帖子,使用的是脚本制作的在线编辑器,这个大家都知道吧?在FF下就不能用.
    为什么呢?因为W3C就不支持主页通过脚本去控制iframe.那么大家发帖子的时候,是喜欢用在线编辑器,还是喜欢用呆板的文本框呢?在线编辑器是"为了花梢"吗?那是实实在在的功能啊!----再进一步说,现在Ajax的声音是越来越高了,"Ajax"中的字母J就是javascript的意思,离开了脚本,你怎么实现Ajax?
    脚本仅仅是"为了花梢"?
    在W3C的标准下,许多实实在在的功能都没办法实现.WEB客户端的技术可不只是设计一下网页这么简单,如果W3C只能"服务到这个程度"的话,大家还是考虑一下要不要认可它吧?我还是那句话:
    VML哪里不好?
    HTC哪里不好?
    父子页面的相互控制哪里不好?
    W3C真是从技术角度舍弃它们,还是出于政治目的抵制他们呢?W3C出于政治目的造成的损失,凭什么要我们买单?
      

  35.   

    大家讨论的问题好高深,不太了解,说说我作为一个页面设计人员对ff和w3c的浅见吧
    先踩ie,它太过宽容了,以至于能够容忍代码书写人员的太多毛病,你css漏了一个单位,他正常显示,你页面少了结束标签,他正常显示,不知道这是放纵还是容错性好。
    ff不一样,多个“#”或者少个“px”,它就给你脸色,告诉你,你代码不规范……似乎是在培养代码人员的严谨作风,生活也应该……(以下省去文字若干)
    再说W3C,我目前对他的理解仅局限于web标准的前两个层次,结构标准和表现标准,ff好像比较好的做到了这点,而ie就不多说了。
    w3c的动作比如用更有语义的strong代替b标签,抛弃<font>标签等等,为的是让代码更加规范化,更具有语义。现在越来越多设计人员开始抛弃表格布局页面的传统方式,并把结构语义话和代码语义话融入到页面设计制作中,这点足以证明大家已经慢慢接受w3c所提倡的东西,至于再深一层DOM之类的行为标准,不了解,也就不作评论……
    不管w3c是处于政治目的还是什么其他,没去深究,至少站在设计人员的角度上,我觉得它提倡的web标准挺好……
      

  36.   

    楼上的仁兄,你说的标签、CSS什么的,好象是HTML的标准和CSS的标准.
    这两个标准,大家倒是无甚异议的.现在讨论的DOM标准----它的DOM也算得上好吗?至于说到程序的兼容性,我就不大明白了.难道没有兼容和容错性的软件反而更好吗?
      

  37.   

    既然这些标准都是w3c提倡的,HTML的标准和CSS的标准大家也都无甚异议,那楼主还为什么因为他的DOM标准在你们看来不够好,好像它就一无是处的一味批判?……也许人家也是在探索过程中,哪个标准一出来不被大家口水的?你说的容错性这个好坏掺半,好的就是它容错了,不好的是容错的后果:将养成程序员代码不规范的毛病,兼容性这也是w3c提倡的,你前面说得好些功能似乎都是ie only吧,这何来兼容性好可言?
      

  38.   

    老兄,请看清题目,我们所大力批判,是W3C的DOM标准.如果你觉得不清楚的话,我这里再特别申明一下.
    我再重复一遍,好的标准我赞成,不好的就反对.HTML的标准和CSS的标准好,我们就该支持;
    DOM的标准不好,当然就该大力反对.
    难道因为A标准好,就也要支持不好的B标准?这是什么逻辑,就因为是同一家公司出的?至于人家在探索中嘛,就等他们探索得足够好了,我们再支持吧.
    而至于W3C因为与他人恶性竞争,因为可能给咱们带来麻烦,当然要大力抵制.关于兼容性嘛,任何一家公司也只是作浏览器这款软件而已,而无权也无义务去管他人的代码规范问题,别把自己想得那么伟大.
    ie only的兼容性恰恰说明了IE好,FF烂.only不可以吗?别人烂,你也要陪着一起烂?
      

  39.   


    难道因为A标准好,就也要支持不好的B标准?这句我没说,你自己理解的,我的意思是人家有好有坏不要一味去看人家的缺点往死里踩!!!标准应该算是公平的,如果把ie的东西全定位标准,那还要W3C作甚么,一个ie足矣,定法律还要全民投票,这也是你自己说得,怎么能让ie说了算?ie功能强只是因为它发展的早,不经意间养成了众人的使用习惯,难道说发展的早就是好的,是对的?这是什么逻辑?不争了,没有结果的东西,大家看法各自有各自的角度,自己觉得好的就用,不好的就别用,这句最实用……
      

  40.   

    既然楼上的老兄不再搬出HTML和CSS的标准,来帮DOM说话,那我也不打算和你争,是你的表达有问题还是我的理解有问题.我说IE的标准好,绝不是因为它发展早,而是因为它恰恰比W3C好.
    你自己对比一下IE的DOM里有多少东西,W3C里有多少?
    一个连innerHTML都不支持的标准也叫好?如果W3C的DOM好的话,我自然是支持它,哪怕被迫用IE的标准也会支持它.
    可现在恰恰相反,没多少人用它,也没多少人觉得它好,更没多少人支持它.