Обнаружить, разрешен ли полноэкранный режим в ActionScript 3.0?
-
20-08-2019 - |
Вопрос
Я хотел бы удалить полноэкранную кнопку, если параметр 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;
Я рекомендую прочитать:
[Изменить:
О человек, совершенно неправильно понял ваш вопрос.]
После небольшого теста кажется, что вы можете просто использовать механизм исключений, чтобы проверить его без какого-либо ощутимого мерцания:
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 не существует.