在IE8中调整Flash的大小是错误的

时间:2011-01-21 04:00:55

标签: javascript actionscript-3 internet-explorer actionscript

问题

在IE中调整Flash对象的大小时,它的调整大小处理程序错误地认为只有阶段宽度已更新。

重现错误的步骤

  1. 您翻转并单击Flash 按钮
  2. 按钮生成一个 ExternalInterface调用JS。 JS 调整Flash等等。
  3. 在 所有非IE浏览器,Flash都是 已通知尺寸变化和 完美地执行其调整大小处理程序。 在IE8中, 调用resize处理程序,但是 只有它的舞台宽度已更新。它仍然相信它的高度是一样的。
  4. 要最终让IE8的Flash确认其真实高度,请将鼠标从SWF中滚出。
  5. 的Actionscript

    package {
     import flash.external.*;
     public class Player {
      public function Player(container:Stage) {
       this.container.addEventListener(Event.RESIZE, this.onResize);
      }
      public function expand():void {
       ExternalInterface.call('expand');
      }
      public function onResize():void {
       // float chrome buttons to the right
       // float chrome to the bottom
      }
     }
    }
    

    的Javascript

    // Using Prototype framework
    function expand() {
     $('flash').setStyle({
       width: '500px',
       height: '400px'
     });
     // do other stuff in JS too
    }
    

    除了Internet Explorer之外,所有浏览器都会触发侦听器。 Javascript没有问题 - 我看到Flash调整大小了。但是在我的鼠标离开SWF之前,Actionscript监听器才会被触发。关于IE的渲染引擎我需要知道什么才能解决这个问题?

    之前

    before

    之后 - IE的Flash通知宽度变化,但仍然认为它的高度是相同的。

    alt text

    将鼠标移出SWF - 您必须将鼠标滚出SWF for Flash以确认其在IE8中的真实高度

    alt text

3 个答案:

答案 0 :(得分:0)

不确定为什么会这样,但我建议(或强烈建议)在闪存端添加回调,并从javascript触发它以强制进行调用。

查看ExternalInterface.addCallback

我可以继续讨论如何使这部分(js< - > Flash communicaiton)正常工作,但有人已经这样做了。

http://www.viget.com/inspire/bi-directional-actionscript-javascript-communication/

答案 1 :(得分:0)

答案 2 :(得分:0)

我通过第二次设置Flash的高度来解决这个问题。即使它被设置为相同的高度,它也会诱骗IE重绘页面。