在FLVPlayer项目升级过程中中使用到flash全屏,而全屏有两种方式,一种是点击外面的菜单或使用快捷键调用flash控件(ActiveX)的callFunction去调用swf里面的函数使之全屏, 另一种是在swf里的按键的事件中写上全屏代码,然后点击按钮实现。
但是,这两种有着本质的区别,第一种实际上只是改变swf里的一些自定义参数并没有使swf全屏,全屏的实际上是窗口,在调用callFunction调用swf里面的函数后,swf使用fscommd向宿主容器也就是我们的FLVPlayer.exe发送一些消息,然后在消息响应中控制窗口的大小,把窗口的一些部分隐藏,使之看起来像全屏。第二种,则是在事件处理函数中写上Stage["displayState"] = "fullScreen";使之全屏, 这样的全屏才是真正的全屏, 在全屏时会出现几秒“按ESC退出全屏”的按钮,这是adobe flash player自带的全屏。
然后我把第一种的假全屏换成第二种的真全屏,我先看了代码,发现实际上假全屏的callFunction调用的函数和第二种真全屏的按钮事件调用的是一样的代码。我就奇怪了,为什么会有这种情况呢,同样的代码不同的调用方式会出现不同的效果,然后我在网上查了一下,发现以下信息。
“在 ActionScript 中处理全屏模式时,需要记住以下注意事项:
只能通过 ActionScript 响应鼠标单击(包括右键单击)或按键才能启动全屏模式。
对于有多个显示器的用户,SWF 内容将展开且只填充一个显示器。Flash Player 使用度量信息来确定哪个显示器包含 SWF 的最大部分内容,然后使用该显示器提供全屏模式....”
那就是说,swf内容全屏必须是手动点击按钮才行。
好的,上面那个问题告一段落,在搜索的信息中我发现了其它有用的信息,1、fscommand(“fullScreen”,‘true’)也能使swf全屏,2、有没有可能实现自动全屏。
关于,第一个,我将代码中的Stage["displayState"] = "fullScreen";全部换成相应的fscommand(“fullScreen”,‘true’),然后在把用来测试的fla文件编译出swf文件,然后单独打开这个文件(注意,调试状态下不能全屏),点击全屏按钮可以全屏。然后把这些As代码编译到FlvPlayer项目使用的SWF文件中,然后替换到项目build文件夹下的相关文件
结果不可以全屏。
第二个,在我的应用场合基本上没有可能实现自动全屏,限制就是必须是响应鼠标消息才能全屏。当然AIR除外,AIR是可以在启动时自动全屏的。