检测ActionScript 3.0中是否允许全屏?

时间:2009-03-18 17:04:58

标签: flash actionscript-3 fullscreen flashvars

如果allowfullscreen参数为false,我想删除全屏按钮 param value="true" name="allowfullscreen"

有谁知道是否有可能检测到这个值?它在loaderInfo.parameters上没有其他flashvars。

8 个答案:

答案 0 :(得分:2)

您想要的会员是

stage.displayState

可以像这样分配:

import flash.display.StageDisplayState;

....

stage.displayState = StageDisplayState.FULL_SCREEN;
stage.displayState = StageDisplayState.NORMAL;

我建议阅读:

http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000352.html

[编辑:

哦,伙计,完全误解了你的问题。]

经过一点点测试后,看起来你可以使用异常机制测试它而没有任何可察觉的闪烁:

try
{
    stage.displayState = StageDisplayState.FULL_SCREEN;
    stage.displayState = StageDisplayState.NORMAL;
} catch ( error:SecurityError ) {
// your hide button code            
}

答案 1 :(得分:2)

AS3的解决方案

您可以通过舞台属性检查是否允许全屏,例如我的情况

try {
    if (btn.stage["allowsFullScreen"]) { // if this fails, then its not allowed
        // do full screen allow code here
        btn.alpha = 1; // show since its allowed
    }
} catch (error:Error) { // full scrren not allowed
    btn.alpha = 0.5; // dim since it cant be used
}

答案 2 :(得分:0)

实际上,有关如何在ActionScript 3中检测到允许或不允许全屏模式的文档不清楚。

他们唯一提到的是,如果您尝试切换到全屏模式并且不允许,那么您将获得一个异常,您可以捕获。这不会让您隐藏或显示全屏模式按钮。

可能有办法,但“生活方式”出了名的不完整或简短。

您可以通过查看根对象的参数来读取“全屏”参数的值,默认为false:

var keyStr:String;
var valueStr:String;
var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters;
for (keyStr in paramObj) {
valueStr = String(paramObj[keyStr]);
//do something with this information
}

<击> 编辑:你注意到它没有回到flashvars中。

答案 3 :(得分:0)

您无法检测嵌入是否将allowfullscreen设置为false / true。

不幸的是,您需要等到用户点击按钮以捕获最终错误,从而禁用该按钮。

仍然......你必须处于一个非常特殊的环境中才能要求flashplayer自己评估这个值,因为可能编辑它。如果嵌入由第三方处理,需要能够决定是否允许全屏模式。如果是这种情况,只需添加一个额外的flash-var(例如fullscreenButton = false)。

答案 4 :(得分:0)

我能想到的唯一方法是通过ExternalInterface调用JavaScript函数。您可以轻松地从JavaScript中读取flash嵌入参数,但我想如果您可以将JS插入到嵌入电影的HTML中,您可能更改参数而不是尝试找出它是什么。

除此之外,Jotham的解决方案似乎没问题,除了stage.displayState = StageDisplayState.FULL_SCREEN;只能由用户事件触发的事实。

  

响应用户点击鼠标或按键启动全屏模式;没有用户输入,电影无法更改Stage.displayState。 (http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/display/Stage.html#displayState

你应该有第二个按钮,当按下时,运行Jotham的代码。我会去找一个登录按钮或用户可以按的任何其他按钮。

答案 5 :(得分:0)

可悲的是,上面的帖子不起作用。一个瑞士法郎:

package {
    import flash.display.Sprite;
    import flash.display.StageDisplayState;
    import flash.events.Event;
    import flash.events.MouseEvent;

    public class Tester extends Sprite {
        public function Tester() {
            trace("Display States: Full="+StageDisplayState.FULL_SCREEN+"; Normal="+StageDisplayState.NORMAL);
            trace( "- Display State? "+stage.displayState);
            trace( "- Full Screen Enabled? "+(stage.hasOwnProperty("displayState")) );
            stage.addEventListener( MouseEvent.CLICK, function(evt:Event=null):void {
                trace("Attempting to change to FullScreen...");
                try {
                    stage.displayState = StageDisplayState.FULL_SCREEN;
                    trace("Success!");
                    stage.displayState = StageDisplayState.NORMAL;
                } catch(e:*) {
                    trace("Fail! "+e);
                }
            });
        }

    }
}

禁用FullScreen时将跟踪:

Display States: Full=fullScreen; Normal=normal
- Display State? normal
- Full Screen Enabled? true
Attempting to change to FullScreen...
Fail! SecurityError: Error #2152: Full screen mode is not allowed.

问题是Full Screen Enabled? true部分。

答案 6 :(得分:-1)

我相信我们可以通过尝试收听

来检查此功能
_root.stage.addEventListener(FullScreenEvent.FULL_SCREEN, onFullScreenListenter);

从我在严格安全性设置主机中尝试允许全屏模式的测试中,它将返回null异常。我猜因为FullScreenEvent不存在。

答案 7 :(得分:-3)

编辑:现在已经过时了(对于FP 8.5 / 9来说是个黑客攻击)

以下内容将检测您的播放器是否具有全屏可用性(thx @mrdoob):

var hasFullscreen:Boolean = (stage.hasOwnProperty("displayState"))