我的页面中有一个 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/