[原]SWFObject FAQ 使用swfobject以及flash的注意事项 中文翻译
发布时间:2020-12-15 06:46:48 所属栏目:百科 来源:网络整理
导读:2010年06月18日 星期五 18:35 由于某度过于恶心等众所周知的原因,搬离写了5年的渣度空间,准备把技术性的文章定在CSDN了。这些都是文章备份。勿怪。。 (鉴于最近有些抓取机器和抄袭者,把标题的【原】字都复制,我不得不声明:本文为 yukon12345原创,转载
2010年06月18日 星期五 18:35 由于某度过于恶心等众所周知的原因,搬离写了5年的渣度空间,准备把技术性的文章定在CSDN了。这些都是文章备份。勿怪。。 (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,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,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/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |