解决方法Flash不允许全屏来自Javascript

JoJ*_*oJo 9 javascript flash actionscript-3

我有使用HTML/CSS设计的视频播放器镀铬按钮.全屏按钮需要告诉Flash全屏,但Adobe禁止这种Javascript-to-Actionscript交互.什么是聪明的黑客来解决这个问题?

背景

我正在制作支持许多插件的基于网络的视频播放器 - Flash,VLC,HTML5,iPhone的Quicktime等...我希望所有这些播放器共享相同的Chrome按钮 - 播放,暂停,静音,音量滑块,分辨率选择器,全屏.这些按钮使用HTML/CSS布局.

 ____________      ____________      ____________
|           |     |           |     |           |
|   Flash   |     |   VLC     |     |   HTML5   |       ...
|           |     |           |     |           |
-------------     -------------     -------------
[A][B][C][D]      [A][B][C][D]      [A][B][C][D]
Run Code Online (Sandbox Code Playgroud)

我处理的所有插件都允许Javascript控制插件.这是一个如何让HTML元素与HTML5视频交互的示例.在与其他插件连接时,代码几乎相同.唯一改变的是调用的实际函数名称.

// Using Prototype JS library
$('playButtonId').observe(
  'click',
  function(event) {
    $('html5Id').play();
  }
);
Run Code Online (Sandbox Code Playgroud)

Flash中的全屏出现问题.在Actionscript 3.0中,您可以执行此操作以向Javascript公开全屏回调:

package {
 import flash.external.*

 private var theStage:Stage;

 public class Player {

  public function Player(stageReference) {
   this.theStage = stageReference;
   ExternalInterface.addCallback("fullScreen", this.fullScreen);
  }

  private function fullScreen():void {
   this.theStage.displayState = StageDisplayState.FULL_SCREEN;
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

当Javascript调用时$('flashPlayerId').fullScreen();,没有任何反应,因为Adobe要求SWF中的单击触发全屏事件.这是为了防止黑客编写劫持用户屏幕而不启动它的恶意网站.

目前的黑客

我正在重新创建Flash中的所有chrome按钮以支持全屏.我必须将所有图形导入Flash并将所有Javascript转换为Actionscript.

 ____________      ____________      ____________
|           |     |           |     |           |
|   Flash   |     |   VLC     |     |   HTML5   |       ...
|           |     |           |     |           |
|           |     -------------     -------------
| A  B  C D |      [A][B][C][D]      [A][B][C][D]
-------------
Run Code Online (Sandbox Code Playgroud)

这给我带来了很多痛苦和痛苦.每当我需要进行更改时,我都会更新HTML和JS.这种变化反映在VLC,HTML5和其他玩家身上.但由于Flash不共享相同的HTML chrome按钮,因此我必须复制Flash/AS中的更改.所以我正在寻找一种更好的解决方案来减少重复代码的数量.它不一定要风格清洁.我只想要易于维护.

Tom*_*Tom 4

只需给您的 Flash 影片设置 0.1% 的不透明度(您需要使用 wmode),并将其直接放置在 html 按钮上方。用户点击 flash 但看到的是 html。动作脚本代码只是告诉玩家进入全屏,然后使用ExternalInterface调用一些javascript。请赏金!