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解析方法不同。