Javascript 捕获跨源iframe事件
我在域a有一个网站,其中包含一个iframe,用于显示YouTube上托管的视频。在iframe加载事件中,我尝试在iframe中注册keyup事件,以便在客户端按下escape键时关闭视频。下面是我的代码示例: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); })
$(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。