SWFObject
SWFObject是一个用于在HTML中方面插入Adobe Flash媒体资源(*.swf文件)的独立、敏捷的JavaScript模块。该模块中的JavaScript脚本能够自动检测PC、Mac机器上各种主流浏览器对Flash插件的支持情况。它使得插入Flash媒体资源尽量简捷、安全。而且它是非常符合搜索引擎优化的原则的。此外,它能够避免您的 HTML、XHTML中出现object、embed等非标准标签,从而符合更加标准。
SWFObject在IE下的BUG
如果Flash里绘制的对象的宽高是自适应Flash的宽高的,那么,使用SWFObject来插入Flash在IE会导致一个问题,当这个Flash被缓存后,也就是第二次访问该页面时,在该Swf文件被加载时,获取到的stage.stageWidth和stage.stageHeight为0,绘制的对象也就看不到了。
在Flash里监听resize事件,找出解决方法
如下(如果加载较慢就先等等吧~):
查看演示
用IE的话,会看到5行,有两次resize事件,这也就导致了Flash在加载的时候绘制对象错误(宽和高为0):
数字是stage.stageWidth和stage.stageHeight
info
resize
0 x 0
resize
300 x 300
如果用Firefox等浏览器,只输出两行文字,没有resize事件:
info
300 x 300
AS里的解决方案
通过监听resize事件,当stage.stageWidth和stage.stageHeight大于0时再进行初始化
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
public class AutoSizeExample extends Sprite
{
private var txt:TextField;
public function AutoSizeExample()
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
txt = new TextField();
txt.multiline = true;
txt.wordWrap = true;
txt.text = "info\n";
addChild(txt);
if (stage.stageWidth>0 && stage.stageHeight>0){
createChild();
}else{
stage.addEventListener(Event.RESIZE,onResize);
}
}
private function onResize(e:Event):void
{
if (stage.stageWidth>0 && stage.stageHeight>0){
stage.removeEventListener(Event.RESIZE,onResize); //删除事件监听
createChild();
}
//否则继续监听事件,直到stage.stageWidth和stage.stageHeight大于0时才初始化
}
private function createChild():void
{
//进行初始化操作,创建各对象
//.......................
var w:Number = stage.stageWidth;
var h:Number = stage.stageHeight;
txt.appendText(w + " x " + h + "\n");
}
}
}
SWFObject.js里的解决方案
在swfobject.js里找到函数function createSWF(attObj, parObj, id)
里面针对winIE的处理方法是:el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>';
看了一下Adobe自己的AC_OETags.js,他是用document.write方法直接写入,没有这个问题;
直接写静态html(object)没有这种问题;
直接访问这个flash的地址,也没有这种问题。
至于el.outerHTML的方式为什么会导致这种问题,还没有深究,暂时还不太清楚是什么原因导致的~
待续~~~
分享到:
相关推荐
2、使用swfObject向页面中插入Flash文件。 3、使用Flash中的ExternalInterface.call方法和fscommand方法对JS进行调用与传送数据。 4、使用Flash中的ExternalInterface.addCallback方法创建接口,使JS能够调用AS中的...
SWFObject是一个用于在HTML中方便插入Adobe Flash媒体资源(*.swf文件)的独立、敏捷的JavaScript模块。该模块中的JavaScript脚本能够自动检测PC、Mac机器上各种主流浏览器对Flash插件的支持情况。它使得插入Flash...
SWFObject_2.0_使用方法
SWFObject.js Flash性能增强插件,可用于网站大型flash展示页面。
为什么你应该使用SWFObject 2.0? • 3 . 为什么SWFObject 2.0使用JavaScript? • 4 . 我们应该使用静态发表还是动态发表的方法? • 5 . 怎样用SWFObject 2.0的静态发表方法来嵌入Flash内容 o 5-1 . 第一步:...
SWFObject: 基于Javascript的Flash媒体版本检测与嵌入模块 SWFObject: 基于Javascript的Flash媒体版本检测与嵌入模块 SWFObject: 基于Javascript的Flash媒体版本检测与嵌入模块
修改自Google工程师写的那个swfobject 2.2版本 删除掉一些不常用的功能减少文件大小 并增加一种更人性化的FLASH插入标签 格式型如 如<flash id="Mack" name="Mack" src="RightClick.swf" width="560" height="420" ...
HTML插入Flash的全兼容完美解决方案-SWFObject
swfobject.js代替JavaScript实现点击按钮显示Flash动画 swfobject.js代替JavaScript实现点击按钮显示Flash动画
swfobject+swffit实现flash嵌入网页自适应大小
本实例在IE6、IE7、IE8、Chrome、Firefox测试通过,在实际项目使用中,对可能出现的问题,尤其在IE6中无法显示flash图表,本人特撰写《Flash图表组件——使用Open Flash Chart 2.0的一些问题及解决办法》,具体访问...
Flash 嵌入的问题朋友们可能认为很简单,但是具体到一些问题上来讲,就不是那么简单了,比如:IE浏览器对FLASH的拦截虚框怎么去掉?在FF、OP、NS等其它浏览器是否兼容?代码是否符合W3C标准??等等
flash swfobject.js实例360室内装饰图片全景查看
swfobject 2.2 去除网页Flash(SWF文件)的虚线框 swfobject 2.2 去除网页Flash(SWF文件)的虚线框
SWFObject.js的简单应用,用于在网页嵌入swf文件,很easy
插入flash代码 ,可以直接设置flash的参数
使用.js方式将flash嵌入web页面,内含示例及源码!
swfaddress.js的作用是在不刷新网页的情况下为地址栏更换地址,并可实现访问这个地址时也同时接受到参数。注:除js文件外请详细看.fla文件,在本地测试无法观看到地址栏的结果,请放置到服务器IIS环境。 swffit.js...
原来这是老外开发的,用于在HTML中方面插入Adobe Flash媒体资源(*.swf文件)的独立、敏捷的JavaScript模块,该模块中的JavaScript脚本能够自动检测PC、Mac机器上各种 主流浏览器对Flash插件的支持情况。目前最新的...
SWFObject是一个用于在HTML中方便插入Adobe Flash媒体资源(*.swf文件)的独立、敏捷的JavaScript模块。该模块中的JavaScript脚本能够自动检测PC、Mac机器上各种主流浏览器对Flash插件的支持情况。它使得插入Flash...