怎样在JavaScript中引用活动的object元素?(采用第一种嵌入方法)
一个嵌套object方法的副作用就是每个SWF文件在HTML代码中都有两个object元素与之对应,但是你只能使用一个id或者name属性,因为他们在一个页面中必须是独一无二的。

下面的浏览器可能会识别不同的活动object元素:

Windows下的Internet Explorer的只知别外层的object元素,因为内层的object被条件注释掉了。
Opera和Safari都支持外层的object标签(参考:[ http://www.swffix.org/testsuite/ ],行:object ActiveX)。
Firefox、Mozilla和其他基于Gecko的浏览器使用内层的object。
你可以这样引用活动的object元素:

为外层的object元素添加一个id
使用下面的代码来引用object元素:
var obj = swfobject.getObjectById("myId");
if (obj) {
  obj.doSomething(); // e.g. an external interface call
}
示例页面:[ http://www.swffix.org/swfobject/testsuite/test_com.html ]

怎样使用SWFObject动态的嵌入Flash内容?(第二种嵌入方法)
第一步:用符合标准的标签创建替换内容
SWFObject的动态嵌入方法遵循渐进增强(progressive enhancement)[ http://www.adobe.com/devnet/flash/articles/progressive_enhancement.html ]的原则,当浏览器对JavaScript和Flash插件有足够支持的时候,SWFObject会用Flash内容替换HTML内容。首先定义你的替换内容,并且为它添加一个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>

第二步:在HTML页面的head标签中包括SWFObject JavaScript类库
SWFObject的JavaScript类库由一个外部JavaScript文件(大小:10.7Kb,GZIPed:3.5Kb)组成。SWFObject会在外部JavaScript文件被加载后立即被执行,并且对于那些支持DomLoad事件的浏览器,例如 IE、Firefox、Safari和Opera 9+,SWFObject将会在DOM被加载后完成所有的DOM操作,而如果浏览器不支持DomLoad事件,所有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>

第三步:用JavaScript嵌入你的SWF
swfobject.embedSWF(swfUrl, id, width, height, version, expressInstallSwfurl, flashvars, params, attributes)有5个必须的参数和4个可选的参数:

swfUrl(String,必须的)指定SWF的URL。
id(String,必须的)指定将会被Flash内容替换的HTML元素(包含你的替换内容)的id。
width(String,必须的)指定SWF的宽。
height(String,必须的)指定SWF的高。
version(String,必须的)指定你发布的SWF对应的Flash Player版本(格式为:major.minor.release)。
expressInstallSwfurl(String,可选的)指定express install SWF的URL并激活Adobe express install [ http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75 ]。
flashvars(String,可选的)用name:value对指定你的flashvars。
params(String,可选的)用name:value对指定你的嵌套object元素的params。
attributes(String,可选的)用name:value对指定object的属性。
<!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内容?
你可以为你的object元素添加下面这些常用的可选属性(attributes)[ http://www.w3schools.com/tags/tag_object.asp ]:

id
name
styleclass(不使用class,因为class也是ECMA4的保留关键字)
align
你可以使用下面这些专用于Flash的可选param元素[ http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_12701 ]:

play
loop
menu
quality
scale
salign
wmode
bgcolor
base
swliveconnect
flahvars
devicefont [ http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_13331 ]
allowscriptaccess [ http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_16494 ]
seamlesstabbing [ http://www.adobe.com/support/documentation/en/flashplayer/7/releasenotes.html ]
allowfullscreen [ http://www.adobe.com/devnet/flashplayer/articles/full_screen_mode.html ]
allownetworking [ http://livedocs.adobe.com/flash/9.0/main/00001079.html ]
怎样用JavaScript对象来定义你的flashvars、params和attributes?
你最好用对象的字面量(Object literal notation)来定义JavaScrpt对象,例如这样:

<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>
你可以在定义对象的时候添加你的name:value对(注意:请确保不要再对象中的最后一个name:value对后面加上逗号):

<script type="text/javascript">
 
var flashvars = {
  name1: "hello",
  name2: "world",
  name3: "foobar"
};
var params = {
  menu: "false"
};
var attributes = {
  id: "myDynamicContent",
  name: "myDynamicContent"
};
 
swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0","expressInstall.swf", flashvars, params, attributes);
 
</script>
或者在对象创建之后用点号添加属性(properties)和值:

<script type="text/javascript">
 
var flashvars = {};
flashvars.name1 = "hello";
flashvars.name2 = "world";
flashvars.name3 = "foobar";
 
var params = {};
params.menu = "false";
 
var attributes = {};
attributes.id = "myDynamicContent";
attributes.name = "myDynamicContent";
 
swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0","expressInstall.swf", flashvars, params, attributes);
 
</script>
上面的代码也可以这样写(为那些喜欢俏皮话的顽固脚本程序员准备的不易读的简写版本(the less readable shorthand version for the die-hard scripter who love one-liners)):

<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或者一个空对象:

<script type="text/javascript">
 
var flashvars = false;
var params = {};
var attributes = {
  id: "myDynamicContent",
  name: "myDynamicContent"
};
 
swfobject.embedSWF("myContent.swf", "myContent", "300", "120", "9.0.0","expressInstall.swf", flashvars, params, attributes);
 
</script>
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 2.0 HTML和JavaScript代码生成器(SWFObject 2.0 HTML and JavaScript generator)来帮助你创建代码:[ http://code.google.com/p/swfobject/wiki/SWFObject_2_0_generator ]。

怎样在一个HTML页面中嵌入多个SWF文件?(采用第二种嵌入方法)
请重复第一步到第三步(在“怎样使用SWFObject动态的嵌入Flash内容?(第二种嵌入方法)”中提到的)来添加任意多个SWF文件到你的页面。

怎样使用SWFObject的JavaScript类库获得Flash Player的相关信息?
SWFObject包含了一个公共API,通过它你可以用JavaScript获得Flash Player的相关信息。

swfobject.getFlashPlayerVersion()返回一个包含了已安装Flash Player主要版本(major:Number)、次要版本(minor:Number)、发行版本(release:Number)的JavaScript对象:

var playerVersion = swfobject.getFlashPlayerVersion(); // returns a JavaScript object
var majorVersion = playerVersion.major; // access the major, minor and release version numbers via their respective properties

swfobject.hasFlashPlayerVersion(versionNumbersString)返回一个Boolean值,表明特定版本的Flash插件是否已被安装:

if (swfobject.hasFlashPlayerVersion("9.0.18")) {
  // has Flash
}
else {
  // no Flash
}

需要注意的是,表示Flash版本的数字通常由四部分组成:major.minor.release.build,但是SWFObject只识别前3个数字,所以“WIN 9,0,18,0”(IE)或者“Shockwave Flash 9 r18”(其他浏览器)都会被翻译为“9.0.18”。

SWFObject v2.0与其他一些相似的类库,例如SWFObject v1.5和UFO,相比有什么不同?
第二种嵌入方法(在“怎样使用SWFObject?”中描述的)的工作方式跟SWFObject v1.5和UFO类似,都是用JavaScript动态的将替换内容替换为Flash内容。

第一种嵌入方法的工作原理则与上面的不同,它使用符合标准的标签嵌入Flash内容,然后用JavaScript来解决使用标签嵌入时出现的一些问题。这种新方法的优势在于:

更能实际的掌握对符合标准标签的创作。(The actual authoring of standards compliant markup is promoted.)
插入Flash内容的机制不再依赖于JavaScript,所以这种方法适当的“降级”了。
如果你安装了Flash插件,但是JavaScript被禁用了或者浏览器并不支持JavaScript,你仍然能够看到你的Flash内容。
Flash将能够在那些对JavaScript支持较弱的设备上运行,例如Sony PSP。
像RSS阅读器这样的自动化的工具能够读取Flash内容。
与第一种方法相比,第二种方法的优势在于:

更容易被编写和维护,因为它显得更简洁,没有包含多余的代码。
避免了通过“点击激活”的机制来激活Internet Explorer 6+和Opera 9+中的Flash内容。

从SWFObject v1.5迁移到SWFObject v2.0的注意事项
现在更倾向于在HTML页面的head标签中插入所有的脚本文件。
现在类库使用的是小写:swfobject,而不是SWFObject。
现在只能通过类库(的类)来访问方法(译者注:即静态方法),而不是像从SWFObject v1.5中那样通过SWFObject的实例来访问。
API跟以前完全不同了,而且更详尽:[ http://code.google.com/p/swfobject/wiki/SWFObject_2_0_api_javascript_dev ]。
如果浏览器对JavaScript和Flash有足够的支持,SWFObject 2.0会将整个替换内容,包括被引用的HTML容器元素,替换为Flash内容,而不是像SWFObject 1.5那样,只把被引用容器里面的内容替换为Flash内容。你现在可以这样转移你的CSS规则:为你的Flash内容定义与替换内容的容器元素相同的id(前者将替换后者,所以你的id不会重复)。

从UFO迁移到SWFObject v2.0的注意事项
如果浏览器对JavaScript和Flash有足够的支持,SWFObject 2.0会将整个替换内容,包括被引用的HTML容器元素,替换为Flash内容,而不是像UFO那样,只把被引用容器里面的内容替换为Flash内容。你现在可以这样转移你的CSS规则:为你的Flash内容定义与替换内容的容器元素相同的id(前者将替换后者,所以你的id不会重复)。
UFO的setcontainercss特性没有被合并到SWFObject 2.0中,但是使用SWFObject 2.0的API可以很容易的实现相同的功能,请参考:[ http://code.google.com/p/swfobject/wiki/SWFObject_2_0_api_javascript_dev ]中的swfobject.createCSS(selStr, declStr)。

使用SWFObject会有什么风险?
当选择第一种嵌入方法时:

73%的web用户(IE6、IE7和Opera共同占有的市场份额,数据来源:thecounter.com [ http://www.thecounter.com/stats/2007/September/browser.php ])会因为“点击激活”的机制获得一些不好的用户体验。
不超过1%的web用户可能会看到错误的Flash内容:
当你以Flash Player 9发布Flash内容,但用户只安装了Flash Player 6,这时用户可能会看到错误的内容或者看不到任何内容。出现这种情况的概率是0.4%左右(大约6%的用户没有安装Flash Player 9,同时有6%的用户禁用了JavaScript)。
当你以Flash Player 8发布Flash内容,但用户只安装了Flash Player 6,这时用户可能会看到错误的内容或者看不到任何内容。出现这种情况的概率是0.04%左右(大约0.7%的用户没有安装Flash Player 8,同时有6%的用户禁用了JavaScript)。(数据来源:thecounter.com [ http://www.thecounter.com/stats/2007/September/javas.php ]和Adobe [ http://www.adobe.com/products/player_census/flashplayer/version_penetration.html ])
需要注意的是,虽然这种嵌入方法有它的风险,但出现的几率不会比其他可用的嵌入方法更大。

当选择第二种嵌入方法时:

6%的web用户禁用了JavaScript,或者使用了不支持JavaScript的浏览器,或者使用的浏览器对JavaScript的支持不足,这时用户将看不到任何Flash内容(无论用户是否已安装了最新的Flash Player),但他们能看到相应的替换内容。(数据来源:thecounter.com [ http://www.thecounter.com/stats/2007/September/javas.php ])

SWFObject支持MIME类型application/xhtml+xml吗?
出于设计上的考虑,SWFObject不支持MIME类型。

我们不提供支持的理由有很多:

只有很少一部分(并不重要)web开发者使用它。
我们不确定那是否今后的发展方向。Internet Explorer并不支持它,而其他主流的浏览器将它们的目标定在了一种新的HTML解析标准(以及HTML 5),而这将偏离目前W3C所提倡的将HTML解析为XML。
考虑到节省文件大小,以及时间、精力的限制(主要在测试和解决疑难问题方面),我们不提供对它的支持。

转载于:https://www.cnblogs.com/liuzhong/archive/2011/06/28/2092167.html

SWFObject 2.0 官方文档二相关推荐

  1. SWFObject 2.0官方文档

    SWFObject 2.0官方文档 2008年4月24日 翻译:farthinker 主要内容: 1 . 什么是SWFObject 2.0? 2 . 为什么你应该使用SWFObject 2.0? 3 ...

  2. 翻译:SWFObject 2.0官方文档(用来做flash的js)

    http://www.cnblogs.com/taobataoma/archive/2008/04/15/1154019.html

  3. Hyperledger Fabric 2.0 官方文档中文版 第6章 教程(下)

    Hyperledger Fabric 2.0 官方文档中文版 第6章 教程下 总目录 6.教程(下) 使用CouchDB 为什么使用CouchDB? 在Hyperledger Fabric中启用Cou ...

  4. CUDA10.0官方文档的翻译与学习之编程接口

    目录 背景 用nvcc编译 编译工作流 二进制适配性 ptx适配性 应用适配性 C/C++适配性 64位适配性 cuda c运行时 初始化 设备内存 共享内存 页锁主机内存 可移植内存 写合并内存 映 ...

  5. Hyperledger Fabric 2.0 官方文档中文版 第6章 教程(上)

    Hyperledger Fabric 2.0 官方文档中文版第6章 教程上 总目录 6.教程(上) 将智能合约部署到通道 启动网络 Logspout设置 打包智能合约 安装链码包 批准链码定义 将链码 ...

  6. Hyperledger Fabric 2.0 官方文档中文版 第3章 关键概念

    Hyperledger Fabric 2.0 官方文档中文版 第3章 关键概念 总目录 3.关键概念 引言 什么是区块链? 区块链为什么有用? 什么是Hyperledger Fabric? Hyper ...

  7. Hyperledger Fabric 2.0 官方文档中文版 第5章 开发应用程序

    Hyperledger Fabric 2.0 官方文档中文版 第5章 开发应用程序 总目录 5.开发应用程序 情景 PaperNet网络 介绍参与者 分析 商业票据生命周期 交易 账本 过程和数据设计 ...

  8. Hyperledger Fabric 2.0 官方文档中文版 第1章 引言

    Hyperledger Fabric 2.0 官方文档中文版 第1章 引言 总目录 1.引言 Hyperledger Fabric 模块化 许可区块链与无许可区块链 智能合约 新途径 隐私和保密 可插 ...

  9. Spring Boot 2.0官方文档之 Actuator

    https://blog.csdn.net/alinyua/article/details/80009435 前言:本文翻译自Spring Boot 2.0.1.RELEASE官方文档,该Spring ...

  10. vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍

    这是我的vue.js 2.0的学习笔记,采取了将官方文档中的代码集中到一个文件的形式.目的是保存下来,方便自己查阅. !官方文档:https://cn.vuejs.org/v2/guide/ 01. ...

最新文章

  1. 干货丨机器学习入门(经典好文,强烈推荐)
  2. python 静态变量 静态方法 简介
  3. Bonjour/Zeroconf with Arduino
  4. 扒一扒MathType不为人知的技巧
  5. 无聊博文之:用同余的语言阐述欧几里德算法
  6. Unity3D学习笔记——Unity3D的窗口布局
  7. .Net架构篇:实用中小型公司支付中心设计
  8. Java中的瞬态关键字及其使用
  9. IntelliJ IDEA 详细图解最常用的配置
  10. 关于HTTPS认证,这里解决你所有疑惑
  11. 随想录(分布式系统)
  12. React Native将license修改为MIT,与React保持一致
  13. 【Qt开发】设置中心窗口 setCentralWidget
  14. 树如何找共同祖先_树的运用:求树上共同祖先LCA
  15. tcgetattr学习
  16. [论文阅读] 激光点云分割-RPVNet
  17. Docker基础:指定USER的容器中获得root用户的方法
  18. 类似易企秀的h5页面如何制作,邀请函,贺卡
  19. Proftpd配置文件
  20. preg_replace函数去除字符串中的空格,逗号(,)等

热门文章

  1. GAN 模式崩溃的理论解释
  2. javascript时钟代码 DEMO-002
  3. SolidWorks工程图比例 1:1 配置
  4. Android蓝牙打印机打印图片文字
  5. 怎么完全卸载赛门铁克_如何无密码卸载Symantec杀毒软件
  6. java8实现map遍历,map转list,list转map
  7. c语言:鸡兔同笼问题
  8. 基于LMI的线性系统滑模鲁棒控制
  9. Kolmogorov–Smirnov test 柯尔莫哥洛夫-斯米尔诺夫检验
  10. 酉矩阵和次酉矩阵的定义