Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery将侦听器附加到iframe内的顶部窗口焦点事件_Javascript_Jquery - Fatal编程技术网

Javascript 使用jQuery将侦听器附加到iframe内的顶部窗口焦点事件

Javascript 使用jQuery将侦听器附加到iframe内的顶部窗口焦点事件,javascript,jquery,Javascript,Jquery,是否有一种方法可以在iFrame中附加侦听器,当浏览器窗口获得焦点选项卡或标题栏时,该侦听器将被调用?以下是测试代码: test.html: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><body><iframe src="test1.html"></iframe>&

是否有一种方法可以在iFrame中附加侦听器,当浏览器窗口获得焦点选项卡或标题栏时,该侦听器将被调用?以下是测试代码:

test.html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><body><iframe src="test1.html"></iframe></body></html>
test1.html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script></head><body><script type="text/javascript">
    var doc = $(window.top.document);
    var win = $(window.top);
    doc.ready(function(){
             win.focus(function() { console.log('Focus'); });
             win.blur(function() { console.log('Blur'); });
             doc.mousemove(function() { console.log('Move'); });
    });
</script></body></html>

点击test.html,mousemove listener将被调用,但focus和blur仅在iFrame打开和关闭时被调用,而不是在浏览器窗口获得/失去焦点时被调用。我尝试将侦听器附加到doc,并获得了相同的结果。我正在用Chrome和Firefox进行测试。

我真的不知道,jQuery的focus/blur有什么神奇之处,但我相信它有点缺陷。或者它可能是一个我不知道的特性:o

如果不使用jQuery方法,它就可以正常工作

var doc = window.top.document;
var win = window.top;
win.onfocus = function() { console.log('Focus'); };
win.onblur  = function() { console.log('Blur'); };
doc.onmousemove = function() { console.log('Move'); };

我真的不知道,jQuery的焦点/模糊的魔力是什么,但我相信这种魔力有点不对劲。或者它可能是一个我不知道的特性:o

如果不使用jQuery方法,它就可以正常工作

var doc = window.top.document;
var win = window.top;
win.onfocus = function() { console.log('Focus'); };
win.onblur  = function() { console.log('Blur'); };
doc.onmousemove = function() { console.log('Move'); };

答案似乎在jQuery实例中。在您的示例中,使用iframe中的jQuery实例在top中的元素上附加事件处理程序。这只是一个猜测,但我要说的是,jQuery实例之间的“魔力”并没有转换

请尝试以下方法:

var doc = window.top.$(window.top.document);
var win = window.top.$(window.top);
doc.ready(function(){
         win.focus(function() { console.log('Focus'); });
         win.blur(function() { console.log('Blur'); });
         doc.mousemove(function() { console.log('Move'); });
});
从以下几方面实现:


答案似乎在jQuery实例中。在您的示例中,使用iframe中的jQuery实例在top中的元素上附加事件处理程序。这只是一个猜测,但我要说的是,jQuery实例之间的“魔力”并没有转换

请尝试以下方法:

var doc = window.top.$(window.top.document);
var win = window.top.$(window.top);
doc.ready(function(){
         win.focus(function() { console.log('Focus'); });
         win.blur(function() { console.log('Blur'); });
         doc.mousemove(function() { console.log('Move'); });
});
从以下几方面实现:


我试图在整个窗口聚焦时调用事件处理程序。我试图在整个窗口聚焦时调用事件处理程序。谢谢,这似乎可以解决我的问题。我还要补充一点,就是要在IE中工作,你必须这样做:如果$.browser.msie{window.top.document.onfocusin=function{console.log'Focus';};}否则{window.top.onfocus=function{console.log'Focus';};}艾奇·奥列格和马克!我需要相同的,但不能使用jquery。你找到它为什么不起作用了吗?我们可以看看jquery的代码来找出答案吗?谢谢你,这似乎能解决我的问题。我还要补充一点,就是要在IE中工作,你必须这样做:如果$.browser.msie{window.top.document.onfocusin=function{console.log'Focus';};}否则{window.top.onfocus=function{console.log'Focus';};}艾奇·奥列格和马克!我需要相同的,但不能使用jquery。你找到它为什么不起作用了吗?我们可以看看jquery的代码来找出答案吗?谢谢