【发布时间】:2023-04-04 14:34:01
【问题描述】:
我知道同源政策......只是把它排除在外。
无论如何,我有一个幻灯片 (slide.js),其中包含一些嵌入式视频。当用户单击视频时,我希望幻灯片暂停。 iframe 内部的事件不会触发,所以我正在尝试解决这个问题。现在我有一个部分解决方案。我在window 上检测到blur 事件,如果新聚焦的元素是iframe,那么我暂停幻灯片:
$(window).blur(function(event){
console.log(event.target);
if($('iframe').is(':focus')){
//clicked inside iframe
console.log('test');
}
console.log('document.activeElement is:');
console.log(document.activeElement);
console.log('\n');
});
加载页面后,我在控制台中得到了这个:
document.activeElement is:
BODY
现在让我感到困惑的部分。 click 事件仅在我单击 iframe 以外的其他位置时才触发 iframe 焦点事件。也就是加载页面后,如果我直接点击iframe,控制台不记录test。如果我在框架之外单击,或者在浏览器中单击另一个选项卡,或者在其他任何地方,blur 事件将触发。之后,如果我单击 iframe,那么我会在控制台中进行测试:
加载页面后,我点击不同的标签,然后回到原来的标签:
Window {top: Window, window: Window, location: Location, external: Object, chrome: Object…}
document.activeElement is:
<body class="full">...</body>
然后我点击 iframe:
Window {top: Window, window: Window, location: Location, external: Object, chrome: Object…}
test
document.activeElement is:
<iframe>...</iframe>
为什么???
我什至把它放在一切之前,但它没有帮助:
$(window).focus();
但是,如果我这样做,它会起作用:
$('input').focus();
如果输入有焦点,那么我可以单击 iframe 并触发事件,而无需事先单击其他任何内容。
帮帮我,你是我唯一的希望......
【问题讨论】:
标签: javascript jquery events dom iframe