Обнаружить, разрешен ли полноэкранный режим в ActionScript 3.0? - PullRequest
6 голосов
/ 18 марта 2009

Я хотел бы удалить полноэкранную кнопку, если параметр allowfullscreen имеет значение false.
param value="true" name="allowfullscreen"

Кто-нибудь знает, возможно ли обнаружить это значение? Он не поставляется с другими flashvars на loaderInfo.parameters.

Ответы [ 8 ]

2 голосов
/ 21 сентября 2011

РЕШЕНИЕ ДЛЯ 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 голосов
/ 18 марта 2009

Член, которого вы хотите

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            
}
0 голосов
/ 15 июня 2011

Полагаю, мы могли бы проверить эту возможность, попробовав прослушать

_root.stage.addEventListener(FullScreenEvent.FULL_SCREEN, onFullScreenListenter);

Из моего теста при попытке разрешить полноэкранный режим на узле с жесткой настройкой безопасности, он вернет нулевое исключение Я думаю, из-за FullScreenEvent не существует.

0 голосов
/ 07 июля 2009

К сожалению, вышеприведенный пост не работает. SWF с:

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 деталь.

0 голосов
/ 14 апреля 2009

РЕДАКТИРОВАТЬ: Это устарело сейчас (был взлом для FP 8.5 / 9)

Следующее будет определять наличие у вашего плеера полноэкранного режима (thx @mrdoob):

var hasFullscreen:Boolean = (stage.hasOwnProperty("displayState"))
0 голосов
/ 24 марта 2009

Единственный способ, о котором я могу подумать, - это вызвать функцию JavaScript через ExternalInterface. Вы можете легко прочитать параметры вставки флэш-памяти из JavaScript, но я думаю, если бы вы могли вставить JS в HTML-код, в который встроен ваш фильм, вы бы скорее изменили параметр, чем пытались бы выяснить, что это такое.

Кроме этого, решение Джотэма кажется приемлемым, за исключением того факта, что stage.displayState = StageDisplayState.FULL_SCREEN; может быть вызвано только пользовательским событием.

Полноэкранный режим запускается в ответ на щелчок мыши или нажатие клавиши пользователем; фильм не может изменить Stage.displayState без участия пользователя. (http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/display/Stage.html#displayState)

У вас должна быть вторая кнопка, которая при нажатии запускает код Джотэма. Я бы выбрал кнопку входа или любую другую кнопку, которую пользователь все равно нажал бы.

0 голосов
/ 19 марта 2009

Вы не можете определить, имеет ли для встроенного разрешения значение допустимого экрана false / true.

К сожалению, вам нужно будет подождать, пока пользователь не нажмет на кнопку, чтобы поймать возможную ошибку и тем самым отключить кнопку.

Тем не менее ... Вы должны быть в совершенно особом контексте, чтобы Flashplayer сам оценил это значение, как вы , вероятно, отредактировали его. В случае, если встраивание выполняется третьей стороной, которая должна иметь возможность решить, должен ли быть разрешен полноэкранный режим или нет. Если это так, просто добавьте дополнительный flash-var (например, fullscreenButton = false).

0 голосов
/ 18 марта 2009

На самом деле, документы неясно, как полноэкранный режим разрешен или не может быть обнаружен в ActionScript 3.

Единственное, что они упоминают, это то, что если вы попытаетесь переключиться в полноэкранный режим, и это будет запрещено, вы получите исключение, которое вы можете перехватить. Это не позволит вам легко скрыть или показать кнопку полноэкранного режима.

Возможно, есть способ, но «живые», как известно, неполны или кратки.

Возможно, вы сможете прочитать значение параметра "fullscreen", которое по умолчанию равно 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...