1

ブラウザ ウィンドウがフォーカスされる (タブまたはタイトル バーがクリックされる) ときに呼び出される 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 リスナーが呼び出されますが、フォーカスとブラーは、iFrame がクリックされたりオフになったりしたときにのみ呼び出されますが、ブラウザー ウィンドウがフォーカスを取得/失ったときには呼び出されません。リスナーを doc にアタッチして、同じ結果を得ようとしました。Chrome と Firefox でテストしています。

4

2 に答える 2

4

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'); };
于 2012-09-10T03:04:57.490 に答える
0

答えは 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'); });
});

実現は次のように輝いていました:

https://leapinggorilla.com/Blog/Read/4/passing-messages-to-iframes-with-jquery

于 2016-10-26T14:47:23.813 に答える