Pergunta

Gostaria de remover um botão de tela cheia se o param allowFullScreen é falsa.
param value="true" name="allowfullscreen"

Alguém sabe se é possível detectar esse valor? Ele não vem com outros flashvars sobre loaderInfo.parameters.

Foi útil?

Solução

EDIT: Este é obsoleto agora (foi um hack para o FP 8.5 / 9)

A seguir irá detectar se o seu leitor tem disponibilidade fullscreen (thx @mrdoob):

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

Outras dicas

O membro que você quer é

stage.displayState

Ele pode ser atribuído como assim:

import flash.display.StageDisplayState;

....

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

Eu recomendo a leitura:

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

[Edit:

Oh homem, descaracterizou totalmente a sua pergunta.]

Depois de um pequeno teste parece que você pode simplesmente usar o mecanismo de exceção para testar-lo sem qualquer cintilação perceptível:

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

SOLUÇÃO PARA AS3

você pode verificar se a tela cheia é permitido através das propriedades do palco, exemplo para o meu caso

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
}

Você não pode detectar se a incorporar tem o conjunto allowFullScreen como falso / verdadeiro.

Infelizmente, você terá que esperar até que o usuário clica sobre o botão para travar o eventual erro e, assim, desativar o botão.

Ainda ... Você deve estar em um contexto muito especial para exigir flashplayer avaliar este valor se como você , provavelmente, editou. No caso da incorporar é tratado por um terceiro que precisa ser capaz de decidir se o modo de tela cheia deve ser permitido ou não. Se este for o caso, basta adicionar um extra de flash-var (por exemplo fullscreenButton = false).

Na verdade, os documentos não são claras quanto à forma integral modo de tela a ser permitido ou não pode ser detectado em ActionScript 3.

A única coisa que mencionam é que, se você tentar mudar para o modo tela cheia e não é permitido, então você vai ter uma exceção, que você pode pegar. Isso não lhe permitirá facilmente para ocultar ou exibir um botão de modo de tela cheia.

Pode haver uma maneira, mas os "livedocs" são notoriamente incompletas ou breve.

Você pode ser capaz de ler a "tela cheia" valor de param cujo padrão é falso, olhando para paramters do objeto de raiz com:

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
}

Edit:. Você notou que ele não vem para trás nos flashvars

O único método que eu posso pensar seria chamar uma função JavaScript via ExternalInterface. Você pode ler facilmente o flash incorporar parâmetros de JavaScript, mas estou pensando se você poderia inserir um JS no HTML do seu filme é incorporado, você teria em vez mudou o parâmetro do que tentar descobrir o que é.

Além disso, a solução da Jotão parece ok, além do fato de que stage.displayState = StageDisplayState.FULL_SCREEN; só pode ser desencadeada por um evento de usuário.

modo de tela cheia é iniciado em resposta a um clique do mouse ou pressione a tecla pelo usuário; o filme não pode mudar Stage.displayState sem entrada do usuário. ( http://help.adobe.com /en_US/AS3LCR/Flash_10.0/flash/display/Stage.html#displayState )

Você deve ter um segundo botão que, quando pressionado, executa o código de Jotão. Eu iria para um botão de login ou qualquer outro botão o usuário deve pressionar de qualquer maneira.

Infelizmente, o post acima não funciona. Um swf com:

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);
                }
            });
        }

    }
}

traçará quando FullScreen está desativado:

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.

O problema é a parte Full Screen Enabled? true.

Acredito que poderia verificar essa capacidade com a tentativa de ouvir o

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

Do meu teste na tentativa de permitir o modo de tela cheia no hospedeiro conjunto forte esquema de segurança, ele irá retornar exceção nula. Eu acho que por causa da FullScreenEvent não existe.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top