1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

请教xml与flash的问题!

本帖由 蓝昊2006-04-13 发布。版面名称:前端开发

  1. 蓝昊

    蓝昊 New Member

    注册:
    2006-04-13
    帖子:
    13
    赞:
    0
    首页是flash,我想要通过验证(其他页ok了,就它不通过我心不舒服)。请看以下:
    1.embed是非法的
    <embed>标签是Netscape的私有标签,虽然<embed>标签应用广泛存在,但是从HTML3.2,HTML4.0到XHTML1.0,W3C都没有收录这个标签。使用<embed>标签的页面将不能通过W3C校验。

    2.应该用object
    W3C推荐的是<object>标签。甚至在XHTML2中,<img>都要被<object>所取代。用<object>方法插入flash的代码是:

    <object type="application/x-shockwave-flash" data="test.swf" width="200" height="100"> <parm name="movie" value="test.swf /> </object>
    但是这个方法在IE5-IE6/Win上不能正确显示(不能连续播放,要下载完才能放),在低版本的可以正确显示。后来采用先调一个小flash文件再嵌入大flash文件的方法解决了连续播放的问题,但是在IE5以上版本有时依然出现不能显示flash的情况。

    3.目前的临时办法
    那么既要符合标准,又想在所有浏览器正确显示flash应该怎么做?macromedia网站是如何通过W3c校验的?

    有设计师想到了用JavaScript来隐藏非法的<embed>标签,

    <script type="text/javascript "> if (navegiator . mimeTypes && navigator . mimeTypes["application/x-shockwave-flash"] { document . write('<embed src="test . swf" ...
    这是目前比较好的解决办法。你一定要插flash,就用js调用。这种方法可以欺骗W3C的校验程序,使页面通过校验。但仅仅是"欺骗",而不是真符合标准。

    macromedia是怎么做的呢?看到这句代码:

    <!-- $RCSfile: FlashDetection2k.pm,v $ $Revision: 1.68 $ : your browser's accept header indicates you have Flash 6,0,65,0 or better, so you're OK for this Flash 6 movie, here it comes. -->
    它采用了一个折中二选一的办法:

    (1).首先javascript来判断你的浏览器版本和flash player的版本;
    (2).根据版本的不同在后台动态的生成HTML代码。
    简单说就是默认采用<object>方法,如果浏览器不能处理object的MIME类型“ application/x-shockwave-flash”,它就插入子元素<embed>。说穿了,这和用js隐藏< embed>方法类似,也是一种“欺骗”的办法,但这是目前能够做到的最符合标准的,比较完美的做法了。

    要想真正抛弃<embed>,只能等IE浏览器对<object>更好的支持才行,也许要等到Longhorn出来了。


    我不会用js。

    还有
    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
    codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"
    width="300" height="120">
    <param name="movie" value="http://www.macromedia.com/shockwave/download/triggerpages_mmcom/flash.swf">
    <param name="quality" value="high">

    <param name="bgcolor" value="#FFFFFF">
    <!--[if !IE]> <-->
    <object data="http://www.macromedia.com/shockwave/download/triggerpages_mmcom/flash.swf"
    width="300" height="120" type="application/x-shockwave-flash">
    <param name="quality" value="high">
    <param name="bgcolor" value="#FFFFFF">
    <param name="pluginurl" value="http://www.macromedia.com/go/getflashplayer">
    FAIL (the browser should render some flash content, not this).
    </object>
    <!--> <![endif]-->

    </object>

    这个也不能通过!
    应该怎么办?
     
  2. 不学无术

    不学无术 Ulysses 的元神

    注册:
    2005-08-31
    帖子:
    16,714
    赞:
    39
    条件编译,是微软的玩意儿吧。

    既然说目前没有完全符合的方法,就不要一味去追求那个不存在的方法了。

    无论是折中还是如何,最大可能地满足不同用户要求,就是成功。
     
  3. 蓝昊

    蓝昊 New Member

    注册:
    2006-04-13
    帖子:
    13
    赞:
    0
    document.writeln(' <object id="irene" classid="clsid27CDB6E-AE6D-11cf-96B8-444553540000"

    codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="1000" height="500">');
    document.writeln(' <param name="movie" value="flash/index.swf" />');
    document.writeln(' <param name="FlashVars" value="loc=en_US&htmlApp=false&gatewayURL=gwurl" />');
    document.writeln(' <param name="bgcolor" value="#ffffff" />');
    document.writeln(' <param name="menu" value="false" />');
    document.writeln(' <param name="quality" value="high" />');
    document.writeln(' <param name="salign" value="tl" />');
    document.writeln(' <param name="scale" value="noscale" />');
    document.writeln(' <embed id="irene" src="flash/index.swf" type="application/x-shockwave-flash"

    pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="loc=en_US&htmlApp=false&gatewayURL=gwurl"

    bgcolor="#ffffff" menu="false" quality="high" salign="tl" scale="noscale" width="1000" height="500"></embed>');
    document.writeln(' </object>');


    之后调用
    <script type="text/javascript" language="JavaScript" src="js/mainflash.js"></script>
    通过了。
    楼上说的很对。只是形式化,更本就不是标准。
     
  4. 蓝昊

    蓝昊 New Member

    注册:
    2006-04-13
    帖子:
    13
    赞:
    0
    现在又用加js外壳的方式通过了w3c和css验证,演示地址是:www.irene.hk
    我是cn,大家多指教!