`

使用SWFObject插入Flash在IE下导致stageWidth为0的解决方法

阅读更多

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的方式为什么会导致这种问题,还没有深究,暂时还不太清楚是什么原因导致的~

待续~~~

分享到:
评论

相关推荐

    AS3与JS交互通信(使用swfObject插入Flash)

    2、使用swfObject向页面中插入Flash文件。 3、使用Flash中的ExternalInterface.call方法和fscommand方法对JS进行调用与传送数据。 4、使用Flash中的ExternalInterface.addCallback方法创建接口,使JS能够调用AS中的...

    SWFObject_2.0_使用方法

    SWFObject 2.0 提供了比其他 Flash Player 嵌入方法更加完善和灵活的解决方案,适合各种类型的开发者使用,无论他们是 HTML 开发者、Flash 开发者还是 JavaScript 开发者,都可以从中受益。具体来说,SWFObject 2.0 ...

    SWFObject.js Flash性能增强插件

    SWFObject.js是一款广泛使用的JavaScript库,专门设计用于在网页中插入、管理和优化Adobe Flash内容。这个插件的出现,主要是为了解决早期Flash在网页中的集成问题,尤其是在不同浏览器和平台上的兼容性问题。通过...

    flash嵌入web页面(swfobject)

    3. 插入SWF:如果用户已安装Flash Player,SWFObject会使用JavaScript动态替换占位符内容,插入SWF对象。 4. 备用内容:对于不支持Flash的浏览器,占位符中的HTML内容将正常显示,确保所有用户都能看到网页内容。 ...

    使用SWFObject.js文件嵌入swf文件的应用

    4. **浏览器兼容性**:SWFObject.js设计的初衷就是为了处理不同浏览器之间的差异,确保Flash内容能在IE、Firefox、Chrome、Safari和Opera等主流浏览器上正确显示。它还考虑了移动设备,如iPhone和iPad,这些设备不...

    websocket兼容IE8

    需要注意的是,虽然这种方法可以解决IE8的WebSocket兼容性问题,但它依赖于Flash,而Flash已经被大多数现代浏览器逐步淘汰。因此,对于仍在使用这些旧浏览器的用户,建议尽量引导他们升级浏览器,或者提供其他如Ajax...

    swfobject 2.0

    这个库的出现解决了早期在网页上插入Flash时存在的兼容性和可访问性问题。标题"swfobject 2.0"指的是该库的第二个主要版本,通常会包含性能提升、新功能和错误修复。 SWFObject的核心功能是通过动态替换HTML代码来...

    SWFObject: 基于Javascript的Flash媒体版本检测与嵌入模块

    SWFObject是一个JavaScript库,主要用于在网页中检测和嵌入Adobe Flash媒体资源,特别是SWF文件。这个模块的核心功能是通过JavaScript脚本来检测用户的浏览器是否安装了足够版本的Flash插件,以支持播放指定的Flash...

    使用SWFObject完美解决HTML插入Flash的各浏览器兼容性方案

    这段代码首先创建一个`&lt;div&gt;`作为Flash的容器,然后使用SWFObject的`embedSWF`函数插入Flash,同时检查用户的Flash版本。如果版本不足,可以执行回调函数中的回退逻辑。 总之,SWFObject是解决HTML插入Flash的兼容...

    SWFObject2.2

    这个库解决了在不同浏览器和版本间插入Flash内容时可能出现的问题,确保了用户无论使用何种浏览器都能顺利查看Flash内容。SWFObject由格雷格·劳瑞(Greg Lawry)开发,其2.2版本是一个稳定且广泛使用的版本。 在...

    swfobject

    **SWFObject:高效插入Flash内容的技术** SWFObject 是一个JavaScript库,广泛用于在网页中无缝、动态地插入...尽管Flash已经过时,理解SWFObject的工作原理和使用方法,对于理解Web发展历史和技术变迁仍然很有价值。

    swfobject 2.1

    - SWFObject 提供了一种优雅的解决方案来嵌入SWF(Shockwave Flash)文件,避免了直接使用内联`&lt;embed&gt;`和`&lt;object&gt;`标签可能导致的跨浏览器兼容性问题。 - 使用SWFObject,开发者可以创建一个备用内容区域,当...

    swfobject+swffit实现flash嵌入网页自适应大小

    `swfobject`是一个轻量级、开源的JavaScript库,主要用来解决Flash内容在网页中的嵌入问题,包括版本检测、内容替换和自适应布局。它通过动态插入HTML代码来实现Flash内容的加载,使得内容能够根据浏览器窗口或容器...

    swfobject flash插件

    SWFObject是一个用于在HTML中方便插入Adobe Flash媒体资源(*.swf文件)的独立、敏捷的JavaScript模块。该模块中的JavaScript脚本能够自动检测PC、Mac机器上各种主流浏览器对Flash插件的支持情况。它使得插入Flash...

    flash swfobject.js实例360室内装饰图片全景查看

    在这个“360室内装饰图片全景查看”的实例中,我们将探讨如何使用Flash和SWFObject.js来实现一个交互式的室内装饰展示。 首先,SWFObject.js的主要功能是检测用户浏览器是否支持Flash,如果支持,则插入SWF文件;...

    解决FLASH都要点击两下才能用,以及IE6播放FLASH弹出Press OK to continue loading the...

    标题中的问题涉及到的是Flash在某些情况下需要用户两次点击才能正常使用,以及在IE6浏览器中播放Flash时出现"Press OK to continue loading the..."的提示。这个问题通常与Flash Player的设置、浏览器兼容性或网页中...

    js > swfobject.js 使用

    **JavaScript与SWFObject.js详解** 在Web开发中,JavaScript是一种强大的客户端脚本语言,而SWFObject.js是一个用于在...尽管随着HTML5的发展,Flash的使用逐渐减少,但在某些场景下,它仍然是一个有价值的解决方案。

    SWFObject 插件

    1. **对象和参数的动态修改**:在页面加载后,你可以使用SWFObject的方法来修改已插入的Flash对象的属性和参数。 2. **事件监听**:SWFObject允许你监听Flash对象的事件,如加载完成、错误等,从而实现更复杂的交互...

    swfobject.js代替JavaScript实现点击按钮显示Flash动画

    在这个场景下,`swfobject.js` 是一个非常实用的工具,它能够帮助开发者更方便地嵌入和控制Flash内容,而无需编写大量的JavaScript代码。本文将详细讲解如何利用`swfobject.js`来实现在点击按钮后显示Flash动画的...

    swfobject.js

    **SWFObject.js** 是一个JavaScript库,专为在网页中无缝、动态地插入和管理Adobe Flash内容而设计。这个库在2.x版本中进行了重大改进,极大地简化了使用过程,使得开发者能够更加轻松地在网页中嵌入SWF(Shockwave ...

Global site tag (gtag.js) - Google Analytics