收藏本站腾讯微博新浪微博

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 网站开通淘帖功能 - 蓝色理想插件 论坛内容导读一页看论坛 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

手机上论坛,使用APP获得更好体验 急需前端攻城狮,获得内部推荐机会 论坛开通淘帖功能,收藏终于可以分类了!

搜索
查看: 17580|回复: 17

[其它] 推荐SWFObject--Flash辅助利器

[复制链接]
发表于 2007-5-27 08:19:57 | 显示全部楼层 |阅读模式
一直想为SWFObject这个JS的类库写一个推荐帖,因为他轻便,同时功能强大,为我们的开发带来了很大的便捷。
  SWFObject是一个基于Javascript的Flash媒体版本检测与嵌入模块,其主要使用目的是让我们将FLASH嵌入网页中的操作更简单,加入了版本检测功能,符合XHTML的标准验证的插入,并解除了IE对FLASH点击激活的限制,对主流浏览器兼容。
  首先让我们看一段SWFObject作用的代码:  

  1. //载入SWFObject类库
  2. <script type="text/javascript" src="swfobject.js" mce_src="swfobject.js"></script>
  3. //设置一个DIV,并设置ID,这个DIV将做为FLASH插入的容器
  4. <div id="flashcontent">播放此动画需要FlashPlayre8.0+ </div>
  5. //利用SWFObject来插入FLASH
  6. <script type="text/javascript"> var so = new SWFObject("movie.swf", "mymovie", "200", "100", "7", "#336699");
  7. //将id为flashcontent的DIV中内容替换为FLASH
  8. so.write("flashcontent");
  9. </script>
复制代码

  看了上面的代码感觉如何?比起平时用Object来插入FLASH文件是不是简洁多了,而且代码结构更清晰,对这段代码的中文解释可参看AW对SWFObject的翻译,已经很详细了,不再赘述,下面只介绍一下个人认为最实用的功能。
 

 一、版本检测 
  难免存在播放器版本过低的用户,而且他们大多数是低端用户,对电脑知识了解较浅,如果他们看不到我们所指出的FLASH动画,或者是由于播放器版本不支持新版本中的某些特性,用户看到的是残缺的动画,那么这就是一个糟糕的用户体验,用户很容易将一切因素都归咎于产品的开发者。实用SWFObject就可以很好的避免这一麻烦,当它检测到用户的播放器版本低于我们设置的版本时,FLASH不会替换DIV容器中的内容,因此我们可以在这里给用户提示,例如:“你需要升级FLASH播放器版本至8.0+”。如果条件允许,我们可以在这里给用户一个Adobe的FlashPlayer的升级链接或者直接提供一个Active安装包给用户下载安装。
  二、对FlashVars的支持

  1. so.addVariable("arg1","test1"));
  2. so.addVariable("arg2","test2"));
复制代码

  上面两句代码将以FlashVars的方式给FLASH的ROOT中添加两个变量arg1=test1,arg2=test2,简洁,方便,同时不用我们再考虑IE和FF的兼容问题。
  注意:JS跟FLASH通信是以字符串传递的,因此对于Number型变量FLASH端需要做类型转换。
  三、设置FLASH内联参数  

  1. so.addParam("wmode", "transparent");
复制代码

  这是我们很熟悉的设置FLASH背景透明的代码,其他内联属性可以尝试设置一下。
  四、获取URL中的变量
  对于url?arg1=test1&arg2=test2这样用GET方式传递变量的URL,我们可以用getQueryParamValue方法来获取变量。
  

  1. var t1 = getQueryParamValue("arg1");
  2. alert(t1);
复制代码


  注意:如需转载,请注明出处http://www.v-sky.com/blog/index.php/archives/172

[[i] 本帖最后由 yoyokings 于 2007-5-27 08:21 编辑 ]

评分

参与人数 1威望 +3 收起 理由
jimohuoshan + 3 精品文章

查看全部评分

发表于 2007-5-27 08:48:44 | 显示全部楼层
看过很多关于SWFObject的介绍了,这个最简洁清晰,打分鼓励。

另外,我在我的个人门户中做大规模JS和AS交互应用的时候,发现如果用SWFObject的话,会给交互带来混乱,比如定位功能失效等,研究了半天也没搞懂,最后放弃了。不知道LZ有没有碰见过类似问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-27 10:29:43 | 显示全部楼层
其实最常用的就是addVariable,这样能够给程序留出灵活的接口,随后我会写一篇关于灵活接口的心得。 :) 
你指的定位功能是什么?不大理解
回复 支持 反对

使用道具 举报

发表于 2007-5-27 11:03:27 | 显示全部楼层
我用的是ExternalInterface类和JS交互。
关于定位,说白了就是利用JS获得网址后缀参数并传会FLASH,FLASH再根据这个参数显示指定的网页或者内容。但当我用了SWFObject后,参数传递就失效了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-27 11:42:42 | 显示全部楼层
原帖由 [i]jimohuoshan 于 2007-5-27 11:03 发表
我用的是ExternalInterface类和JS交互。
关于定位,说白了就是利用JS获得网址后缀参数并传会FLASH,FLASH再根据这个参数显示指定的网页或者内容。但当我用了SWFObject后,参数传递就失效了

addVariable其实还是用的flashvars的方式给flash传递参数,你使用出现问题应该是哪儿的Code出问题了。你可以在flash里trace看看
回复 支持 反对

使用道具 举报

发表于 2007-5-29 21:35:07 | 显示全部楼层
这里ID=“flashcontent" 不是高级样式么?
不要先定义CSS?
回复 支持 反对

使用道具 举报

发表于 2007-5-29 22:18:58 | 显示全部楼层
没看过SWFObject的代码。我下载到的都是没有排版的::懒的排了::
这些资料很有用,收藏。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-30 09:11:09 | 显示全部楼层
原帖由 [i]hellonicholas 于 2007-5-29 21:35 发表
这里ID=“flashcontent" 不是高级样式么?
不要先定义CSS?

这里使用ID的只是用来访问DOM结构的,跟CSS无关,你可以测试一下
回复 支持 反对

使用道具 举报

发表于 2007-5-30 09:25:42 | 显示全部楼层
曾经我也激动过

后来发现有5%左右的失效率,就是怎么弄也不能在用户机器上显示Flash。重装插件都没用。有几个硬是重装系统搞定了(一个10W级的用户测试中得到的结论)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-30 09:35:11 | 显示全部楼层
原帖由 [i]tenlin 于 2007-5-30 09:25 发表
曾经我也激动过

后来发现有5%左右的失效率,就是怎么弄也不能在用户机器上显示Flash。重装插件都没用。有几个硬是重装系统搞定了(一个10W级的用户测试中得到的结论)

先记下了,继续考察,如果真有这个问题,那就有待斟酌使用了,改进,改进SWFObject。。。
回复 支持 反对

使用道具 举报

发表于 2007-5-30 12:27:03 | 显示全部楼层
原帖由 [i]yoyokings 于 2007-5-30 09:11 发表

这里使用ID的只是用来访问DOM结构的,跟CSS无关,你可以测试一下



因为我看到有全Flash的网站的源文件中就定义了CSS

#flashcontent {
       height:100%;
       ......
   }

不知为何要先定义一个ID,能解释一下么?

或许是他有错?

谢谢~
回复 支持 反对

使用道具 举报

发表于 2007-5-30 13:26:58 | 显示全部楼层
id 也可以定义CSS的 牵涉到JS的DOM 还有CSS 没什么复杂的啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-30 13:32:12 | 显示全部楼层
他没有错,他用这个ID是要定义一个CSS的样式
回复 支持 反对

使用道具 举报

发表于 2007-5-30 19:26:24 | 显示全部楼层
那他的这个ID是作为so.write("flashcontent");中的ID使用还是定义CSS使用?
回复 支持 反对

使用道具 举报

发表于 2007-5-30 19:45:25 | 显示全部楼层
ID是DOM文档的一个节点。js引用了不代表css就不能定义它的样式。

<div id="我自己定义的id">当flash正常显示的时候这里的内容会被js替换掉</div>
so.write("我自己定义的id");
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-31 07:14:36 | 显示全部楼层
原帖由 [i]hellonicholas 于 2007-5-30 19:26 发表
那他的这个ID是作为so.write("flashcontent");中的ID使用还是定义CSS使用?

这个ID的定义是供so.write使用的,不过如果你要定义CSS使用它也不冲突
回复 支持 反对

使用道具 举报

发表于 2008-7-4 10:22:49 | 显示全部楼层
后来发现有5%左右的失效率


我公司电脑和我家里电脑都在这5%里面
回复 支持 反对

使用道具 举报

发表于 2008-7-8 15:46:09 | 显示全部楼层
原帖由 [i]jazzycn 于 2008-7-4 10:22 发表
后来发现有5%左右的失效率


我公司电脑和我家里电脑都在这5%里面

对的,公司有电脑就是flash显示不出……
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|Archiver|手机版|blueidea.com ( 湘ICP备12001430号 )  

GMT+8, 2020-7-7 08:31 , Processed in 0.109100 second(s), 12 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表