7

ポップアップ (Mobile Safari の新しいタブ) を開く一連のページがあります。これらの各ポップアップは、フォーカスされているかどうかを知る必要があります。デスクトップでは、 と を使用window.onblurwindow.onfocusてこの動作を駆動します。ただし、これらのイベントはいずれも iPad では機能しません。私も試しwindow.onpageshowてみwindow.onpagehideましたが、どちらも適切なタイミングで起動していないようです。テスト HTML ファイルがあります。

<html>
<head>
<script language="javascript">
console.log('Hello');
window.onblur = function(e) { console.log('blur'); };
window.onfocus = function(e) { console.log('focus'); };
window.onpagehide = function(e) { console.log('pagehide'); };
window.onpageshow = function(e) { console.log('pageshow'); };
</script>
</head>
<body>
<a href="http://www.google.com" target="_blank">Click Me</a>
</body>
</html>

理論的には、「Click Me」をクリックすると、新しいウィンドウが表示されたときにぼかしイベントが発生するはずです。しかし、これは Mobile Safari では起こりません。タブを閉じようとしているときを検出するのに役立つだけですonpagehideonpageshow

Mobile Safari で探している動作を取得するにはどうすればよいですか? それはまったく可能ですか?

4

4 に答える 4

6

これを試してください:https ://gist.github.com/1122546

これはVisibiltyAPIポリフィルです。トリックを行う必要があります。

于 2012-06-24T17:39:43.543 に答える
4

検出できるとは思いませんonblurが、これは検出するコードですonfocus:

var timestamp=new Date().getTime();
function checkResume()
{
    var current=new Date().getTime();
    if(current-timestamp>5000)
    {
        var event=document.createEvent("Events");
        event.initEvent("focus",true,true);
        document.dispatchEvent(event);
    }
    timestamp=current;
}
window.setInterval(checkResume,50);

次に、次のように記述します。

document.addEventListener("focus",function()
{
    alert("Focus detected");
},false);
于 2012-06-22T21:29:05.900 に答える
2

iOS 5 は、非アクティブなタブで JS を一時停止します。たぶん、このトピックはあなたを助けることができます.

iOS 5 は、タブがアクティブでないときに JavaScript を一時停止します

Javascript を使用した iPad でのスタンバイ処理

于 2012-06-21T07:35:02.377 に答える
0

誰かが最近同じことを尋ねたので、この回答を私の以前の回答にリンクします

Mageek の方法は、私が行っている方法と非常によく似ていますが、スクロール イベントまたはキーボードが表示されているときにも発生します。スクロール時の動作を防ぐことはそれほど難しくはありませんでしたが、画面上のキーボード イベントを調べることはできませんでした。

私のオブジェクトも requestAnimationFrame を活用し、フォーカス ハックをフォールバックとしてのみ使用し、利用可能な場合は Visibility API を使用することを選択します (理想的には将来的に保証します)。

于 2013-02-04T13:48:01.023 に答える