Firefox 的 iframe 内未触发关键事件

Posted

技术标签:

【中文标题】Firefox 的 iframe 内未触发关键事件【英文标题】:Key events not fired inside iframe for Firefox 【发布时间】:2013-02-20 16:30:20 【问题描述】:

我有自己的小型自制 JSFiddle 网站,我主要是为了好玩而构建的,到目前为止它运行良好,但我只在 Chrome 中开发。我想提及这一点,因为我认为我的问题可能(希望)能够通过更改我的小沙箱来解决,但这是我的主要问题:

在我的沙箱中,我开发了一个小型 Snake 实现,它依赖于按键事件来控制播放器。在 Chrome 中一切正常,我对此非常满意,但在 Firefox 中,我无法控制播放器。你可以在这里看到我的设置:

http://willseph.com/sandbox/?id=ORWx7miv

播放器应该可以通过方向键或 WASD 来控制,但它们似乎在 Firefox 中不起作用。我在another post 中看到应该将tabindex="0" 属性添加到应该获得焦点的元素中(虽然我不确定会是哪个元素,但我尝试将它放在父文档中包含渲染 iframe 的元素中、iframe 元素本身以及 iframe 内的容器 div)。

任何人都可以对此有所了解吗?我很想知道为什么会这样。

更新:

我刚刚在 JSFiddle 上上传了相同的代码,我遇到了同样的问题。键盘控件适用于 Chrome,但不适用于 Firefox:

http://jsfiddle.net/Ud876/1/embedded/result/

【问题讨论】:

它不适合我,我正在使用 chrome.. 这真的很奇怪,它对我来说很好用。您在加载后点击右下角窗口中的“新游戏”按钮,对吧? 没有按钮,该按钮仅在我通过打开检查器缩小窗口中打开的可用空间时出现。 是的,很抱歉,这是因为我的侧边栏 div 太宽了(我今天没有多想就把它放在一起)。 无论如何,我刚刚更新了我原来的问题。 【参考方案1】:

在我使用 firebug 进行的测试中,您的问题似乎在这里:

$(window).keydown(function () 
    //                      ^ --- no event object passed to function
    game.onKeyDown(event, game);
);

查看正在使用的固定小提琴,here。

【讨论】:

我不知道更令人惊讶的是,我错过了这一点,或者它以某种方式设法在我的 Chrome 上运行。无论如何,它是完全固定的。谢谢!

以上是关于Firefox 的 iframe 内未触发关键事件的主要内容,如果未能解决你的问题,请参考以下文章

创建新的 iframe 并同步加载内容

在 iframe 主体上设置焦点和模糊事件不适用于 Firefox

iframe 上的 onload 事件在 ie 和 firefox/google chrome 中的工作方式不同

触发从 iframe 到父文档的自定义事件

如何触发从 iframe 到其父元素的点击事件?

iframe 内的 onload 事件仅触发一次