首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flash / AS3 -在集成开发环境中工作,但浏览器行为奇怪。为什么?

Flash / AS3 -在集成开发环境中工作,但浏览器行为奇怪。为什么?
EN

Stack Overflow用户
提问于 2015-07-10 21:59:59
回答 1查看 54关注 0票数 0

好的,我有一个flash浏览器应用程序,它使用Loader对象加载子swf。我以为向Loader对象添加鼠标单击侦听器可以让我侦听对象上的单击,但它不是这样的。:/

我真的看到点击了!当我在我的IDE (Flash Develop)中测试时被跟踪出来。但是,当放入任何浏览器中时,鼠标处理程序永远不会被调用。有人知道为什么会发生这种事吗?

此外,尝试访问加载器对象的子级会导致Security Sandbox错误。

代码语言:javascript
复制
public function Main() 
    {
        trace("Starting...");
        Security.allowDomain('*');
        Security.allowInsecureDomain('*');

        if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function init(e:Event = null):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);
        // entry point


        var inputFlashVars:Object = this.loaderInfo.parameters

        _swfLoader = new Loader();
        stage.addChild(_swfLoader);
        _swfLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onSwfLoaded);


        var ldrContext:LoaderContext = new LoaderContext(true);
        ldrContext.checkPolicyFile = true;
        ldrContext.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
        //ldrContext.applicationDomain = new ApplicationDomain(new ApplicationDomain());

        var urlForVideoToPlay:String = AD_SWF_URL;
        trace("Loading swf: " + urlForVideoToPlay + " with click URL: " + CLICKTHROUGH_URL);

        _swfLoader.load(new URLRequest(urlForVideoToPlay), ldrContext);

    }


    private function onSwfLoaded(e:Event):void 
    {

        //var swfChild:* = _swfLoader.getChildAt(0);
        //_swfLoader.mouseChildren = false;
        trace(e.target);

        _swfLoader.stage.addEventListener(MouseEvent.CLICK, onInnerSwfClicked, false);
        _swfLoader.stage.addEventListener(MouseEvent.MOUSE_DOWN, onInnerSwfClicked, false);
        _swfLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onSwfLoaded);
        trace("Ad swf loaded!");
    }

    private function onInnerSwfClicked(e:Event):void 
    {
        trace("clicked!!!");

        e.stopImmediatePropagation();

    }
EN

回答 1

Stack Overflow用户

发布于 2015-07-10 23:23:19

我认为错误来自于您的点击监听器,您将它们附加到了错误的stage对象:

代码语言:javascript
复制
_swfLoader.stage.addEventListener(MouseEvent.CLICK, onInnerSwfClicked, false);
_swfLoader.stage.addEventListener(MouseEvent.MOUSE_DOWN, onInnerSwfClicked, false);

在父swif中加载子swif时,舞台指向父swif。它在调试模式下工作,因为您加载子swif时没有shell/父。

试着这样做:

代码语言:javascript
复制
_swfLoader.content.addEventListener(MouseEvent.CLICK, onInnerSwfClicked, false);
_swfLoader.content.addEventListener(MouseEvent.MOUSE_DOWN, onInnerSwfClicked, false);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31342720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档