7.3.3 动态嵌入Flash Player内容

如何使用SWFObject的动态方法嵌入Flash Player内容?

第1步:用符合标准的标签创建替换内容 SWFObject动态嵌入方法遵循逐步增强的原则,当有足够的js和flash插件支持时,用flash代替替换的内容。首先定义替代方案,用一个id标记它。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">  
  <head>  
    <title>SWFObject v2.0 dynamic embed - step 1</title>  
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />  
  </head>  
  <body>  

    <div id="myContent">  
      <p>Alternative content</p>  
    </div>  

  </body>  
</html>

第2步:将JavaScript库引在HTML页面的头部 SWFObject库是一个外部JavaScript文件。一旦加载完成,SWFObject就会被执行,并且一旦dom元素加载完成,dom就会被执行。所有浏览器都支持(IE,Firefox,Safari和Opera 9+)dom操作onload事件被触发后执行。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">  
  <head>  
    <title>SWFObject v2.0 dynamic embed - step 2</title>  
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />  

    <script type="text/javascript" src="swfobject.js"></script>  

  </head>  
  <body>  
    <div id="myContent">  
      <p>Alternative content</p>  
    </div>  
  </body>  
</html>

第3步:使用JavaScript嵌入您的SWF

  • swfobject.embedSWF(swfUrl,id,width,height,version,expressInstallSwfurl,flashvars,params,attributes,callbackFn)有五个必需的参数和五个可选参数。
  • swfUrl(字符串,必需)指定您的SWF的URL
  • id(字符串,必需)指定包含替换元素的html元素的ID,可以用闪光灯的内容替换
  • width(String,required)指定SWF的宽度
  • height(String,required)指定SWF的高度
  • version(String,required)指定SWF发布所需的Flash Player的版本(格式为:“major.minor.release”或“major”)
  • expressInstallSwfurl(字符串,可选)指定快速安装路径来激活快速安装。请注意,快速安装只会触发一次(他第一次被调用),而且只支持在win平台和适用于mac平台的Flash平台6.0上。 65+版本,他将需要最小尺寸为310x137px。
  • flashvars(Object,可选)指定要传递给flash的变量(使用键值对)
  • params(Object,可选)指定嵌入对象的参数(使用键值对)
  • attributes(Object,optional)指定对象的属性(使用键值对)
  • callbackFn(JavaScript函数,可选)定义可以调用的回调函数,无论调用flash是成功还是失败

小提示: 只要不破坏参数顺序,您可以省略可选参数。 如果您不想使用参数,但想要使用下一个参数,则可以将其值设置为false。 对于flash,参数和属性,您也可以使用{} 。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">  
  <head>  
    <title>SWFObject v2.0 dynamic embed - step 3</title>  
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />  
    <script type="text/javascript" src="swfobject.js"></script>  

    <script type="text/javascript">  
    swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0");   
    </script>  

  </head>  
  <body>  
    <div id="myContent">  
      <p>Alternative content</p>  
    </div>  
  </body>  
</html>

如何配置flash?

  您可以添加以下经常使用的可选属性的对象元素:

  • id (NOTE: 如果没有定义会自动取替换元素容器的id)
  • align
  • name
  • styleclass (see note about class)
  • class

注意:class是ECMA4中保留的关键字,在ie中会报错,除非用引号把它括起来 (e.g. "class" or 'class')。 出于这个原因,swfobject的提供作为一种安全的替代语法类的styleClass关键字,如果你使用的是styleClass,swfobject的会自动插入替换成class。

var attributes = {
   id: "myId",
   align: "left",
   styleclass: "myclass"
};

如果你宁愿用class代替styleClass,那么用引号括起来。

var attributes = {
   id: "myId",
   align: "left",
   "class": "myclass"
};

你能使用下面可选的flash指定的参数:

  • play
  • loop
  • menu
  • quality
  • scale
  • salign
  • wmode
  • bgcolor
  • base
  • swliveconnect
  • flashvars
  • devicefont (more info)
  • allowscriptaccess (more info here and here)
  • seamlesstabbing (more info)
  • allowfullscreen (more info)
  • allownetworking (more info)

如何使用JavaScript对象来定义 flashvars, params and object's attributes?

最好使用对象表示法来定义对象:

<script type="text/javascript">

var flashvars = {};
var params = {};
var attributes = {};

swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0","expressInstall.swf", flashvars, params, attributes);

</script> 可以用键值对的方式写:

var flashvars = {
  name1: "hello",
  name2: "world",
  name3: "foobar"
};

也可以用".属性"的方式写:

var flashvars = {};
flashvars.name1 = "hello";
flashvars.name2 = "world";
flashvars.name3 = "foobar";

也可以直接把参数内容加载swfobject.embedSWF()中。

<script type="text/javascript">
swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0","expressInstall.swf", {name1:"hello",name2:"world",name3:"foobar"}, {menu:"false"}, {id:"myDynamicContent",name:"myDynamicContent"});
</script>

如果你不想使用一个可选的参数,你可以把它定义为false或一个空对象

var flashvars = false;var params = {};

FlashVars的对象是一个速记符号,为您的易用性。你可以忽略它,通过 params对象来指定你的flashvars。

<script type="text/javascript">
var flashvars = false;
var params = {
  menu: "false",
  flashvars: "name1=hello&name2=world&name3=foobar"
};
var attributes = {
  id: "myDynamicContent",
  name: "myDynamicContent"
};
swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0","expressInstall.swf", flashvars, params, attributes);
</script>

从SWFObject 1.5迁移到SWFObject 2时需要注意的一点

  • SWFObject 2不能与SWFObject 1.5向后兼容
  • 当前首选将所有脚本块插入到HTML页面的标题中,由于js代码执行的原因,将冲突添加到页面主体(如Flash而不是替换内容)。
  • 库本身是小写:swfobject,而不是SWFObject
  • 方法只能通过库访问

另外,它与JavaScript API完全不同且更复杂 只要js可用,SWFObject 2会将整个替换标记的内容(包括所引用的HTML容器元素)的内容替换为Flash版本支持的Flash内容。但是,SWFObject 1.5只替换表情符号容器的内容。如果你没有定义一个id属性,object元素将自动继承包含元素的id。

从UFO迁移到SWFObject 1.5时的注意事项

  • SWFObject 2只要js可用,将整个替换标记的内容(包括所引用的HTML容器元素)的内容替换为Flash版本支持的Flash内容。但是,UFO只替换替换面部表情容器中的内容。如果你没有定义一个id属性,object元素将自动继承包含元素的id。
  • SWFObject 2中不包含UFO的setcontainercss功能。
  • SWFObject 2是否支持MIME类型application / xhtml + xml?

SWFObject 2不支持XML MIME类型,这是设计决定。出于以下原因:

  • 只有少数(不重要的)web开发人员使用
  • 我们不确定它要去哪里,即不支持他。其他主要的浏览器厂商正在寻求一种新的html解析标准(html5),它与当前的w3c解析方法不同。

results matching ""

    No results matching ""