这将是一个奇怪的问题,但是这里有。我有一个页面,我以大格式显示照片,如灯箱。当按ESC时,我关闭页面并将用户返回到他来自的页面,以正常格式显示照片:
$(document).keyup(function(e) {
if (e.keyCode == 27) {
var closeURL = $('.close').attr('href');
window.location = closeURL;
}
});
但是,在同一个灯箱页面上也是一个可能包含嵌入式Youtube视频的侧面板。用户可以使用Youtube播放器的标准视频控件将该视频放大到全屏。如果用户在该场景中点击ESC,它将关闭全屏视频并返回灯箱页面(标准嵌入式播放器行为,这就是我想要的),但是,ESC键事件然后也触发我关闭灯箱的密钥代码,在这个特定场景中是不可取的。
我发现这种情况在Chrome中存在,但在Firefox中却没有。基本上我想要的是我的ESC代码在按ESC关闭Youtube播放器时不被触发,但只有当用户在观看照片时触及ESC(而不是视频)时才会触发。
我正在调查event.target以区分这些情况,但还没有运气。有什么想法吗?
更新:我现在要接受这个仅限Chrome的错误。仍然对解决方案持开放态度。
答案 0 :(得分:1)
也许这样的事情会起作用:
$(document).not("iframe").keyup(...
答案 1 :(得分:1)
我不相信这是可能的。 Flash播放器在聚焦时捕获输入 - 例如,如果您单击YouTube视频中的播放,然后按Ctrl-W关闭选项卡,它将不会关闭,直到您单击视频外部的页面,将焦点返回到浏览器。
输入控件在聚焦时有效地传递给另一个进程(Flash播放器),因此在用户明确地将控制权返回给浏览器之前,您将无法捕获或操作输入。
答案 2 :(得分:1)
偶然发现了这个...我知道这有点旧,但有一个可能的解决方案(需要更多的工作)......
您可以将youtube播放器包装在您自己的Flash播放器中(使用API或只是一个容器)并检测闪存中的按键。然后,您可以直接从Flash应用程序调用相同的javascript函数,因此无论您是页面还是Flash应用程序都有焦点,您运行的脚本将始终运行。
答案 3 :(得分:0)
您可以通过检测视频的播放状态然后将焦点设置回窗口来完成此操作。
Youtube API的Flash播放器现已弃用 - 因此您应该使用IFrame API。
您可以使用onStateChange
事件检测1 (playing)
状态,然后调用:
`$(window).focus()` (jQuery syntax)
这将允许您使用keyup
事件。请务必使用window
而非document
进行focus()
来电。
这是文档的事件部分。
https://developers.google.com/youtube/iframe_api_reference#Events