Javascript 捕获跨源iframe事件

Javascript 捕获跨源iframe事件,javascript,jquery,security,youtube,Javascript,Jquery,Security,Youtube,我在域a有一个网站,其中包含一个iframe,用于显示YouTube上托管的视频。在iframe加载事件中,我尝试在iframe中注册keyup事件,以便在客户端按下escape键时关闭视频。下面是我的代码示例: $(myIFrame).bind('load', function() { $(myIFrame.contentWindow.document).keyup(function(event) { console.log(event.keyCode); })

我在域a有一个网站,其中包含一个iframe,用于显示YouTube上托管的视频。在iframe加载事件中,我尝试在iframe中注册keyup事件,以便在客户端按下escape键时关闭视频。下面是我的代码示例:

$(myIFrame).bind('load', function() {
    $(myIFrame.contentWindow.document).keyup(function(event) {
        console.log(event.keyCode);
    });
    alert('Event Registered');
});
我得到以下例外情况:

Firefox:
错误:访问属性“文档”的权限被拒绝

Chrome:
Uncaught SecurityError:阻止原点为“a”的帧访问原点为“a”的帧https://www.youtube-nocookie.com". 协议、域和端口必须匹配。

有没有办法在跨源iframe中注册事件?

阻止您这样做

源由方案、端口、协议和域组成。如果这些匹配,则可以使用JavaScript注册事件或操纵DOM

如果您的站点是
http://example.com
视频已打开
http://example.org
则由于域不匹配,因此无法进行跨域脚本编写

不同的来源可以进行通信,但是它们都需要选择此功能。就是这样一个JavaScript函数。但是,由于您无法控制运行视频的源站,因此在这里无法帮助您


解决方案之一是在页面内联显示视频。这应该使您能够捕获事件。

您可以更改域B中页面的源代码吗?不,不幸的是,我完全无法控制域B。B是。因此出于安全原因,您不能使用javascript。我想我希望,由于两个端点都使用SSL,因此有一种方法可以覆盖同一来源策略。YouTube确实支持一个API,但该API公开的事件级别高于keyup。