您的位置:首页 > Web前端 > JavaScript

Flash 与 JavaScript的交互 :Flash的普通嵌入方式

2011-11-23 16:05 323 查看
第一种:古老且不符合W3C标准的嵌入方式:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="550" height="400" id=“demo1" align="middle">
<param name="allowScriptAccess" value="sameDomain"/>
<param name="movie" value="mymovie.swf"/>
<param name="quality" value="high"/>
<param name="bgcolor" value="#ffffff"/>
<embed src="mymovie.swf" quality="high" bgcolor="#ffffff" width="550"  height="400" name=“demo1" align="middle" allowScriptAccess="sameDomain"  type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"/>
</object>


  把以上代码拷贝到你的html文档里面,修改一下flash文件的路径,如:<param name="movie" value="xxx/xxx.swf" />和 <embed src="xxx/xxx.swf" 就可以在你的站点里面显示Flash的内容了,根据需要你可能还会修改一下 width、height、bgColor 等待属性。

  但是,当我们第一眼看到上面的代码时,是不是很晕啊,这是什么啊,这么长看上去好像有很多没有语意,而且有很多冗余的代码。的确这里面有很多让人不爽的地方,下面我们一一道来:

    1)冗余的代码:

      我们看到 width,height,quality,bgcolor align等等这些属性分别在 Object标签、param标签 和 embed 标签里面重复定义了两次同样的值。

    2)codebase 这个是什么意思,我需要么?

      Microsoft Internet Explorer 3.0 版和更高版本使用 CODEBASE 属性检测用户的计算机上安装了哪个版本的 Macromedia Flash Player ActiveX 控件。如果用户的版本比 CODEBASE 指定的版本旧, 那么 Internet Explorer 可自动从 CODEBASE 指定的位置下载并安装新版本的 Macromedia Flash Player。 - 来源
      通过上面的解释,我们知道它是来判断当前Flash文件需要的FlashPlayer的运行版本的。但是有更好的方法么?

    3)为什么还要在object里套一层 embed标签。

      OBJECT标签是用于windows平台的IE浏览器的,而EMBED是用于windows和Macintosh平台下的Netscape Navigator浏览器以及Macintosh平台下的IE浏览器。windows平台的IE利用Activex控件来播放flash而其它的浏览器则使用Netscape插件技术来播放flash。
       也就是说embed是来告诉非 IE的浏览器 渲染当前的Flash文件所需要的信息。虽然embed解决了非IE浏览器渲染Flash文件的问题,但是它无法通过W3C的验证。
    为了解决这些不爽,我们找到了下面这种更好的解决方案。

第二种嵌入方式:符合W3C 标准的嵌入方式

<object width="550" height="400" type="application/x-shockwave-flash" data="swf/fp9.swf" id="test2" style="visibility: visible;">
<param name="movie" value="swf/fp9.swf"/>
<param name="allowScriptAccess" value="always"/>
<param name="wmode" value="transparent"/>
<param name="allowFullscreen" value="true"/>
<param name="quality" value="high"/>
<param name="flashvars" value="text=这是flashvars传入的数据啊"/>
</object>


相比上一段代码,这段的确减轻了我们眼睛的负担,没有了那么多多冗余代码,也符合W3C的标准了。细心的同学估计也看到了 flash文件的路径又被重复定义了两次,跟上面的情况一样,data是满足非IE, <param name="move" src='' />满足IE浏览器。

  

  综合上面的两种方式,虽然都解决了在页面中嵌入Flash的问题,而且第二中方法看起来更优雅,冗余代码很少,但是它们都有一个共同的问题:没有FlashPlayer检测;

  也就是说如果当前的浏览器里面没有安装Flash Player 或者 安装的浏览器版本不能满足要显示的Flash文件的最低的版本要求,就会导致浏览器不能正确的把Flash呈现出来。而此时屏幕前面的用户既没有看到正确的内容,也没有得到错误提示(当然,如果他压根没有安装FlashPlayer,浏览器会自动检测,并提示他安装FlashPlayer插件。)。那么我们怎么解决这个问题呢?为了解决这些问题,我们继续寻找。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: