javascript - Flash 窃取浏览器焦点

标签 javascript html flash

我的页面中有一个 flash 应用程序,当用户与 flash 应用程序交互时,浏览器/html/javascript 停止接收键盘输入。

例如,在 Firefox 中,control-t 不再打开新标签页。

但是,如果我点击页面的非 Flash 部分,浏览器将再次开始接收这些事件。

有没有办法以编程方式(通过 flash 或 javascript)将焦点返回到浏览器?

在用户点击 flash 中的按钮后,我让 flash 执行 javascript 回调,所以我尝试通过 javascript 将焦点放在表单字段(和正文)上,但这种方法似乎不是工作。

Youtube 或许是一个更具体的例子。他们也有这个问题。当我单击播放/暂停按钮或调整音量时,我希望我的浏览器键盘控件仍然有效,但它们不起作用,我必须在页面上电影区域外的某个地方单击。这正是我要解决的问题。

最佳答案

您可以使用 Flash 中的 ExternalInterface 类来调用 JavaScript。例如,您可以在一个时间间隔上设置一个函数(例如 Event.ENTER_FRAME)来调用 @Diodeus 提到的 JavaScript 函数:

document.body.focus();

或者,更好的解决方案是将事件监听器添加到 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");
        }
    }

}

页面上的 Javascript:

<script type="text/javascript" language="javascript">
    function changeFocus(){
        document.body.focus();
    }
</script>

如果您想要一个 AS2 示例,请告诉我,我会发布它。

想记下此解决方案:将焦点推回浏览器后,您将要求用户再次单击 Flash 插件以激活 Flash 插件内的用户输入。这可能是一种不和谐的用户体验,在使用此解决方案时需要考虑这一点。

关于javascript - Flash 窃取浏览器焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/254111/

相关文章:

python - RTMP:使用 Python 检查流是否在线

c++ - 形状中的 Flash "CurveTo"和 "LineTo"

javascript - 使用 ActiveXOjbect 和 javascript 保存 Excel 工作表

javascript - iphone删除模式下app抖动的算法

javascript - 如何从单击按钮时拖入拖放区的 div 获取 javascript 的 id

html - Bootstrap Scrollspy : Remove Box Highlighting. 仅文本

javascript - 语义 UI、调光器背景颜色

Javascript正则表达式匹配字符串,除非前面有反斜杠

javascript - CSS嵌套(tr,td)颜色过渡时间堆叠

flash - 使用 Actionscript 3 连接到数据库