Обнаружить, разрешен ли полноэкранный режим в ActionScript 3.0?

StackOverflow https://stackoverflow.com/questions/659191

Вопрос

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

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

Это было полезно?

Решение

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

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

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

Другие советы

Вы хотите зарегистрироваться

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 & amp; file = 00000352.html

[Изменить:

О человек, совершенно неправильно понял ваш вопрос.]

После небольшого теста кажется, что вы можете просто использовать механизм исключений, чтобы проверить его без какого-либо ощутимого мерцания:

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

РЕШЕНИЕ ДЛЯ 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
}

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

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

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

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

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

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

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

Единственный способ, о котором я могу подумать, - это вызвать функцию JavaScript через ExternalInterface. Вы можете легко прочитать параметры Flash-встраивания из 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 )

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

К сожалению, вышеприведенный пост не работает. 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);
                }
            });
        }

    }
}

Будет отслеживать, когда полноэкранный режим отключен.

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 части.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top