0

我们有一个现有的应用程序,如果我们的用户自动更新到 Adob​​e AIR v3.8,它会导致从本地磁盘加载到 HtmlLoader 实例的交互式 SWF 无法正常运行。鼠标光标卡在窗口的一角,不会移动。我已将问题缩小到我们正在加载的 HTML 中的某些内容。如果 wmode 属性从“不透明”更改为“窗口”,则鼠标可以工作。如果离开如下所示 wmode="opaque" 鼠标光标将不会移动。

我们正在加载的 SWF 已由不同的人以不同程度的质量编码。为了保护我们的应用程序免受各种编码实践的影响,我们使用 HTMLLoader 实例对它们进行“沙箱化”,该实例加载 HTML 文件,该 HTML 文件又加载 SWF。这可以防止加载的 SWF 走到父应用程序(我们的 AIR 应用程序)并做一些不愉快的事情,比如弄乱鼠标。这已经工作了好几年了。现在,这些 SWF 不能正常工作。

下面是我们用来设置 HTMLLoader 的代码,下面是 HTML。

` 导入 core.abstract.ICoreFactory; 导入 core.abstract.ui.IInteractiveRewardPlayer;导入 core.concrete.Instances;

import domain.curriculum.Reward;

import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.html.HTMLLoader;
import flash.net.URLRequest;

import mx.containers.Canvas;
import mx.containers.VBox;
import mx.core.UIComponent;
import mx.logging.*;

public class InteractiveRewardContainer extends Canvas implements IInteractiveRewardPlayer
{       

    private static var _logger:ILogger = Log.getLogger("InteractiveRewardContainer");   
    private var _html:HTMLLoader;   
    public function InteractiveRewardContainer()
    {
        super();
    }

    public function addToDisplay(container:VBox):void
    {
        container.addChild(this);
    }

    public function startReward(reward:Reward, width:int, height:int):void
    {
        _html = new HTMLLoader();
        var bitmapHolder:UIComponent = new UIComponent();
        var mySprite:Sprite = new Sprite();

        var file:String = Instances.coreFactory.resourceLoader.returnHTMLRewardFileName(reward);
        _logger.info("File=" + file);
        var urlReq:URLRequest = new URLRequest(file);

        bitmapHolder.addChild(_html);
        _html.width = width;
        _html.height = height;
        _html.load(urlReq);
        mySprite.addChild(_html);
        bitmapHolder.addChild(mySprite);
        this.addChild(bitmapHolder);    

        this.width = width;
        this.height = height;
    }

    public function stopReward():void
    {   
        _html.loadString("<html></html>");
    }
}

`

和 HTML 的一部分。注意 wmode 属性。将其更改为“窗口”可解决鼠标问题,但随后出现显示问题。 <embed src="76381.swf" quality="high" bgcolor="#869ca7" id="RightClickDemo" width="100%" height="100%" name="Bicycle" align="middle" menu="false" play="true" loop="false" quality="high" wmode="opaque" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" /> 有什么想法可以解决这个问题吗?

4

1 回答 1

0

在 HTML 中将 wmode 设置为“direct”解决了鼠标问题,并保持了正确的显示。

于 2013-08-14T08:24:07.113 回答