问题
我有用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中的更改。所以我正在寻找一个更好的解决方案来减少重复代码的数量。它不一定要风格清洁。我只是想要简单的可维护性。