JMa*_*ark 17 html javascript flash
我的页面中有一个Flash应用程序,当用户与Flash应用程序交互时,浏览器/ html/javascript停止接收键盘输入.
例如,在Firefox中,control-t不再打开新选项卡.
但是,如果我单击非闪存页面的一部分,浏览器将再次开始接收这些事件.
无论如何以编程方式(通过flash或javascript)将焦点返回到浏览器?
在用户点击flash中的按钮后,我让flash执行了一个javascript回调,所以我尝试通过javascript将焦点放在表单字段(和正文)上,但这种方法似乎不起作用.
一个更具体的例子是Youtube.他们也有这个问题.当我单击播放/暂停按钮或调整音量时,我希望我的浏览器键盘控制仍然有效,但他们没有,我必须单击电影区域外的页面上的某个位置.这是我正在努力解决的确切问题.
您可以使用Flash中的ExternalInterface类来调用JavaScript.例如,你可以在一个区间(例如Event.ENTER_FRAME)上设置一个函数来调用@Diodeus提到的JavaScript函数:
document.body.focus();
Run Code Online (Sandbox Code Playgroud)
或者,更好的解决方案是将事件监听器添加到flash根(阶段)以监听鼠标离开Flash的时间.您可以设置此事件以将焦点移动到document.body.
AS3
package {
import flash.display.*;
import flash.events.*;
import flash.external.ExternalInterface;
public class TestMouseLeave extends Sprite
{
public function TestMouseLeave()
{
// Add event listener for when the mouse LEAVES FLASH
addEventListener(MouseEvent.MOUSE_OUT, onMouseLeave);
}
private function onMouseLeave(ev:Event):void
{
var jslink = new ExternalInterface();
jslink.call("changeFocus");
}
}
}
Run Code Online (Sandbox Code Playgroud)
您网页上的Javascript:
<script type="text/javascript" language="javascript">
function changeFocus(){
document.body.focus();
}
</script>
Run Code Online (Sandbox Code Playgroud)
如果您想要一个AS2示例,请告诉我,我会发布它.
想要记下这个解决方案:一旦你将焦点推回到浏览器,你将需要用户再次点击Flash插件来激活flash插件内的用户输入.这可能是一种刺耳的用户体验,在使用此解决方案时需要考虑.
小智 3
我认为 Adobe 需要在鼠标移出其客户区域时放弃焦点,或者提供一个选项来执行此操作。
然而,我认为大多数 Flash 开发人员(尤其是那些制作游戏的开发人员)都依赖这样一个事实:无论鼠标位于何处,键盘输入都会被 Flash 应用程序捕获。