最新消息:新席地网:网页制作,360度全景摄影,微信营销推广,详情见:新席地网xxidi.com,电话:13913571631

SWFObject FAQ 使用swfobject以及flash的注意事项 中文翻译版 .

在线文库 admin 3464浏览 0评论

2010年06月18日 星期五 18:35

由于某度过于恶心等众所周知的原因,搬离写了5年的渣度空间,准备把技术性的文章定在CSDN了。这些都是文章备份。勿怪。。
(鉴于最近有些抓取机器和抄袭者,把标题的【原】字都复制,我不得不声明:本文为 yukon12345原创,转载请注明出处http://blog.csdn.net/yukon12345)

(5)(6)两文已经介绍了js和flash交互的基础,以及如何安全,健壮滴把flash载入到web页面。下面讲的是使用swfobject注意的事项 问答形式
英文版:http://code.google.com/p/swfobject/wiki/faq
重点翻译版:
yukon翻译制作
1。如何让swf以浏览器窗口实际大小显示?为什么在ff中设置swf大小时会消失?

解决步骤:
1。在swfobject的参数设置里值填入原flash的100%大小
2.使用css将默认的margin/padding设置成0,body标签和其他包含swf的标签设置为100%。
代码:
<style type=”text/css” media=”screen”>
html, body, #containerA, #containerB { height:100%; }
body { margin:0; padding:0; overflow:hidden; }
</style>
3。在as里修改管理swf的位置和对齐参数
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;

stage.addEventListener(Event.RESIZE, resizeHandler);

function resizeHandler(event:Event):void {
// center stuff 大小改变时执行的处理函数
}
例子
随浏览器一直缩小
http://www.bobbyvandersluis.com/swfobject/testsuite_2_2/test_dynamic_fullbrowserflash.html
设置最小大小和最大高度
http://www.bobbyvandersluis.com/swfobject/testsuite_2_2/test_dynamic_fullbrowserflash_adv.html
2为何无法看到flash影片内容?虽然我在IE里装了最低要求版本的flash player?

在电脑上安装失败(通常由于安装程序),就不能读取flash player的版本号。当使用js动态发布时,结果会呈现在被替换的div中,
只有重新安装才能解决这个问题。
此处可测试你的flash插件是否能检测版本号。
http://www.bobbyvandersluis.com/swfobject/testsuite_2_1/test_api_getflashplayerversion.html
3。为什么swfobject.getFlashPlayerVersion()有时候报告错误的版本号?
有些版本的播放器会报出错误的版本号。通常发生在在Mac OS X版的安装程序,影响ff,opera,safari。
已知会报错误版本号的播放器:
# 9.0.47 exposes 9.0.19
# 8.0.24 exposes 8.0.23
# 9.0.115 exposes either 9.0.47 or 9.0.64
(这些都是老版本了,几乎应该没人用。后面的不翻了)

4。当<base>标签被添加时,如何防止ie崩溃或者报告“操作失败”(Operation Aborted)错误?

答:使用关闭标签</base>可防止IE崩溃。虽然在html4的兼容页面中,关闭标签并不允许出现,但你可以使用特殊的条件选择注释来保证你的页面在ie下仍然有一个关闭标签
比如<base href=”http://www.yourdomain.com/”><!–[if IE]></base><![endif]–>

5。为什么fscommand不能在IE里执行(使用动态发布方法)

fscommand是as2中的函数,此文不翻译。

6。在IE卸载一个页面时,如何修复低于9版本的播放器报“Line 56: Out of Memory”错误?
<!–[if IE]>
<script type=”text/javascript”>
function fixOutOfMemoryError() {
__flash_unloadHandler = function() {};
__flash_savedUnloadHandler = function() {};
}
window.attachEvent(“onbeforeunload”, fixOutOfMemoryError);
</script>
<![endif]–>
7当使用了External Interface外部接口类,并且swf在一个form表单中时,如何防止IE显示错误消息?

使用下面的js:
function fixReference() {
window[“mySwfId”] = document.forms[0][“mySwfId”];
}
swfobject.addDomLoadEvent(fixReference);

8如何在使用静态发布时,避免asp报 ‘ASP 0139’错误?(iis服务器)

iis服务器不能正确解析嵌套<object>标签的页面。
解决方法:
1。配置iis不以asp方式执行html文件
2。使用include file来嵌入文件(http://seanys.com/2007/09/10/asp-flash-nested-objects/
3.使用动态方式发布加载flash

9.如何使用flashvars传递URL参数或者html参数?

特殊字符如=&并不能自动被转换成能直接被loaderInfo.parameters[]使用的参数,因为在flashvars中代表特殊的用法
你在传递的时候需要编码字符
例如:使用encodeURIComponent
代码:encodeURIComponent(“&hello”)
提醒:encodeURIComponent可能并不在所有浏览器里都可用,但在绝大多数现在的版本浏览器里都有可用。
如果你不放心,可以使用escape()不过escape在处理双字节时候并不太管用。比如中文。(yukon:非常不管用)

10如何居中flash?
你可以用css来居中。比如
<style type=”text/css” media=”screen”>
body { margin:0; text-align:center; }
div#content { text-align:left; }
object#content { display:block; margin:0 auto; }
</style>
content为被替换的div的id
11如何清除flash下面多余的空白?

使用动态发布并且使用strict HTML DOCTYPE 的非IE浏览器会在flash下产生写空白使用下面的css解决
<style type=”text/css” media=”screen”>
object { display:block; }
</style>

12使用swfobject2能把flash嵌入到索尼ps3或者任天堂wii游戏机的浏览器里么(这都有)

在wii上的opera浏览器何以显示动态静态方式加载的flash,不过请注意它只支持到flash player7
psp上的Netfront浏览器和老版本的ps3只可以显示swfobject静态加载的flash,原因是他们的js支持太差劲了
因此swfobject2的脚本根本不能执行(sony情何以堪)也请注意他们只支持到flash player6。

不过sony最新的ps3上的浏览器可以支持flash9和swfobject2。

13。为什么salign param 在ff或safari上无效?

当使用静态发布时,需确认你已经复制了嵌入的param标签到所有的object元素标签里。
还有些顺序必须正确。不如scale必须salign前声明。

14为什么我在ff3下无法看到flash内容?

你是否安装了广告屏蔽扩展组件Adblock extension?在ff3中广告屏蔽可能会不正确的屏蔽掉flash内容(只屏蔽object标签,这就是为何使用swfobject1.5反而会能看到)
不要使用这个组件的disable选项,这样还是无法看到。应该在ff中禁用这个组件。

15为什么我会在ff3 windows版下的wmode transparent(透明) 或者不透明(opaque)模式下看到虚线框环绕着的flash

windows版的ff3使用透明或不透明模式为object元素引入了新的样式,把它当成了一个活动链接。
这可能是ff的bug。使用css来控制
<style type=”text/css” media=”screen”>
object { outline:none; }
</style>

16为何ff载入swf2次?

ff3有一个已知的问题,那就是会2次初始化swf。这个问题还没有解决。
还有如果你在著名的Web Developer Toolbar扩展组件里使用Disable cache选项,2次初始化问题也可能会出现。
17如何禁用flash,或者js来测试?
(这个很常识,我想各位前端们应该很清楚,不翻了)
载入时这样禁用flash:
* Internet Explorer 7: Menu: Tools > Internet Options, Program Tab, click button: Manage add-on, Filters, Add-ons that run without requiring permission, select Shockwave Object, click Enable/Disable button at bottom, close and restart browser
* Firefox 3: Menu: Tools > Add-ons, Plugins tab, Select Shockwave Flash, enable/disable
* Safari 3: Menu: Safari > Preferences, Security tab, Web content: check Enable plug-ins
* Opera 9.5: Menu: Opera > Quick Preferences > Enable Plug-Ins
动态js载入时这样禁用js:
* Internet Explorer 7: Menu: Tools > Internet Options, Security tab, click icon: Internet, click button: Custom Level, scroll to the “Scripting” section of the list, click radio button Disable under Active scripting, close and restart browser
* Firefox 3: Menu: Firefox > Preferences, Content tab, Check Enable JavaScript
* Safari 3: Menu: Safari > Preferences, Security tab, Web content: check Enable JavaScript
* Opera 9.5: Menu: Opera > Quick Preferences > Enable JavaScript

18我在哪里可以找到老版本的flash player测试?

卸载 : http://kb2.adobe.com/cps/141/tn_14157.html
历史版本: http://kb2.adobe.com/cps/142/tn_14266.html
最新版本:http://get.adobe.com/flashplayer/

当你尝试运行一个intel cpu的苹果机,请确保有以下两种Mac安装包:
一个通用的二进制安装包,它须能运行在intel 和powerPC cpu上
powerPC 架构安装包需要浏览器能运行在Rosetta编译器下,他是一个确保老版本的powerPC架构程序能运行在intel架构的程序。
你可以强制一个浏览器在rosetta模式下打开(点击,选择Get info)然后点击“open in rosetta“。新版本的safari 和opera不能支持这个,但
ff3仍然可以。

19如何知道已安装的flash的版本,以及那个版本会被swfobject检测到?

* Firefox 3: Type “about:plugins” in the location/address bar and look for the “Shockwave Flash” entry
* Safari 3: Click “Help > Installed Plug-ins” in the main menu and look for the “Shockwave Flash” entry

flash 版本 检测:

1使用swfobject检测 http://www.bobbyvandersluis.com/swfobject/testsuite_2_2/test_api_getflashplayerversion.html
2使用flash(object方式嵌入)http://www.bobbyvandersluis.com/flashembed/testsuite/15_nested_iecc.html
3使用flash(embed方式嵌入)http://www.bobbyvandersluis.com/flashembed/testsuite/21_embed.html

20为何我的swf 文件在flash player 10 不能显示?
flash player10新的安全特性导致swf文件不能被显示:当一个http服务器发送下面的响应:Content-Disposition: attachment.
(文件处理:附件)
解决方法:http://www.adobe.com/devnet/flashplayer/articles/fplayer10_security_changes_02.html#head32
21为何使用动态发布时, 在ff或者ie中 stage.stageWidth和stage.stageHeight会返回0?

(在ie中,stage 大小会返回正确,而当刷新时,将会变成0)
解决方法是在as中定义一个resize handler。flash player开发团队很明显知道这个问题,因此flash player将持续触发stage.resize
事件直到接收到flash的实际长宽值。
代码:
stage.addEventListener(Event.RESIZE, resizeHandler);
stage.dispatchEvent(new Event(Event.RESIZE)); // force stage resize event for normal cases

function resizeHandler(event:Event):void {
if (stage.stageHeight > 0 && stage.stageWidth > 0) {
stage.removeEventListener(Event.RESIZE, resizeHandler); // only execute once
// your initialization code here
}
}

22为何当使用 Location.toString 是在ff错误控制台中报告拒绝访问?

当你在页面创建了一个不同域的iframe时候,父页面会报出这个错误。这个问题是由flash插件引起的。
添加一个cross-domain文件会解决这个问题 http://www.west-wind.com/WebLog/posts/408827.aspx
23 为什么ie6和7显示错误信息:父节点为空或不是一个对象?

这出现在swfobject库(2.1,2.0版本)在同一个页面被重复引入时。想要避免的话,请不要重复引用库。另外2.2版本已经修复。

24为什么我刷新ie后,内存使用会不断上升?

最近Anychart.com小组发现了长期以来ie6/7/8中刷新含 flash9/10的页面导致内存泄露的原因。
这个bug的原因并不是flash player本身。而是因为Skype(著名的网络电话)的 IE 插件。
你可以查看在他们的博客更多的信息以及如何禁用这个插件。
http://www.anychart.com/blog/2009/07/27/anychart-has-discovered-bug-in-skype-skype-promises-to-fix-it-asap-2/

来源:http://blog.csdn.net/yukon12345/article/details/6827864



分享到: 更多

转载请注明:梦寻天涯的博客 » SWFObject FAQ 使用swfobject以及flash的注意事项 中文翻译版 .

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址