2011-06-02 42 views
8

问题

我有用HTML/CSS设计的视频播放器镀铬按钮。全屏按钮需要告诉Flash全屏显示,但Adobe禁止这种Javascript-to-Script的交互。什么是解决这个问题的巧妙方法?解决方法Flash不允许从Javascript全屏

背景

我正在支持许多插件基于Web的视频播放器 - 闪存,VLC,HTML5,iPhone的QuickTime等...我想所有这些球员共享相同的镀铬按键 - 播放,暂停,静音,音量滑块,分辨率选择器和全屏。这些按钮用HTML/CSS进行布局。

____________  ____________  ____________ 
|   |  |   |  |   | 
| Flash |  | VLC  |  | HTML5 |  ... 
|   |  |   |  |   | 
-------------  -------------  ------------- 
[A][B][C][D]  [A][B][C][D]  [A][B][C][D] 

我处理的所有插件都允许Javascript来控制插件。以下是如何获取HTML元素与HTML5视频进行交互的示例。与其他插件进行交互时,代码几乎完全相同。唯一改变的是被调用的实际函数名称。

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

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

当JavaScript调用$('flashPlayerId').fullScreen();,什么都不会发生由于Adobe需要由SWF内点击触发全屏事件。这是为了防止黑客通过编写恶意网站劫持用户的屏幕而无需启动它。

当前哈克

我目前正在重新创建Flash中的所有镀铬按钮,支持全屏。我不得不将所有图形导入Flash,并将所有Javascript转换为ActionScript。

____________  ____________  ____________ 
|   |  |   |  |   | 
| Flash |  | VLC  |  | HTML5 |  ... 
|   |  |   |  |   | 
|   |  -------------  ------------- 
| A B C D |  [A][B][C][D]  [A][B][C][D] 
------------- 

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

回答

4

只要给你的Flash影片0.1%不透明度(你将需要使用wmode),并将其直接放置在html按钮上。用户点击闪光灯,但看到的HTML。 actionscript代码只是告诉玩家全屏,然后使用ExternalInterface调用一些javascript。赏金请!

2

您可以使用haXe创建一个代码库,该代码库将转换为javascript以及actionscript。

这意味着当然,你也必须学习haXe。

[编辑]

更简单的方法可能是创建所有图像的sprite sheet。 这样你只需要在CSS中导入你的工作表并设置工作表视口的正确位置。然后你也可以将精灵表动态加载到flash中。

您唯一需要照顾的就是精灵表中图像的正确定位。

干杯

2

您可以触发全屏显示,无用户交互Flash组件IE:一个按钮的鼠标点击。
尽管在JavaScript中有一个单击事件,但它不会工作,因为该单击事件不会在Flash堆栈中。


[编辑]
一个解决,你可以做的是建立您的应用程序在Flex和使用CSS样式的按钮。
另一个解决方法。使用css在flex中创建布局swf来设置按钮的样式,并将其他swf加载并定位到其中。
解决方法将需要一些设置,但是当你想改变按钮,你只需要改变CSS,如图像源或颜色或任何你正在改变。