如果 allowfullscreen 参数为假,我想删除全屏按钮。
param value="true" name="allowfullscreen"
有谁知道是否可以检测到该值?loaderInfo.parameters 上没有其他 flashvars。
如果 allowfullscreen 参数为假,我想删除全屏按钮。
param value="true" name="allowfullscreen"
有谁知道是否可以检测到该值?loaderInfo.parameters 上没有其他 flashvars。
你要的会员是
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
}
实际上,文档不清楚如何在 ActionScript 3 中检测到是否允许全屏模式。
他们唯一提到的是,如果您确实尝试切换到全屏模式并且不允许这样做,那么您将得到一个异常,您可以捕获该异常。这不会轻易让您隐藏或显示全屏模式按钮。
可能有办法,但众所周知,“livedocs”不完整或简短。
您可以通过查看根对象的参数来读取默认为 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 中返回。
您无法检测嵌入是否将 allowfullscreen 设置为 false/true。
不幸的是,您需要等到用户单击按钮才能捕获最终错误,从而禁用该按钮。
仍然...您必须处于非常特殊的环境中才能要求 flashplayer 在您可能编辑它时自行评估此值。如果嵌入由需要能够决定是否应允许全屏模式的第三方处理。如果是这种情况,只需添加一个额外的 flash-var(例如 fullscreenButton=false)。
我能想到的唯一方法是通过 ExternalInterface 调用 JavaScript 函数。您可以轻松地从 JavaScript 读取 Flash 嵌入参数,但我想如果您可以将 JS 插入到您的电影嵌入的 HTML 中,您宁愿更改参数而不是尝试找出它是什么。
stage.displayState = StageDisplayState.FULL_SCREEN;
除此之外,除了只能由用户事件触发的事实之外,Jotham 的解决方案似乎还可以。
全屏模式响应用户的鼠标点击或按键而启动;没有用户输入,电影无法更改 Stage.displayState。(http://help.adobe.com/en_US/AS3LCR/Flash_10.0/flash/display/Stage.html#displayState)
您应该有第二个按钮,当按下该按钮时,它将运行 Jotham 的代码。我会选择登录按钮或用户无论如何都会按下的任何其他按钮。
可悲的是,上面的帖子不起作用。一个瑞士法郎:
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 不存在。
编辑:这现在已经过时了(是 FP 8.5 / 9 的 hack)
以下将检测您的播放器是否具有全屏可用性(谢谢@mrdoob):
var hasFullscreen:Boolean = (stage.hasOwnProperty("displayState"))