2012-08-03 35 views
13

運行時,不會觸發大家都知道移動Safari暫停在網頁中的JavaScript執行時Pagehide事件在iPad上

  1. 您切換到不同的瀏覽器選項卡
  2. 開關不同的iOS應用(例如,當你得到了來電的手機應用程序)

您可以訂閱窗口的「pagehide」「pageshow」前夕nts來檢測即將停止和重新激活Javascript。

的問題是,這些事件不火的時候,標籤交換上iPad的移動Safari(1)。在iPhone移動Safari的一切都是罰款,正如上面所述。

是微不足道的證明:

<!DOCTYPE html> 
<html> 
<head> 
    <script> 
     window.addEventListener("pagehide", function(evt){ 
      var logger = document.getElementById('log_id'); 
      logger.innerText = logger.innerText + " pagehide fired!"; 
     }, false); 
    </script> 
</head> 
<body> 
<div id="log_id"></div> 
</body> 
</html> 

它觸發對標籤交換(1)做應用程序切換(2),而不是僅在臺iPad(的iOS5和iOS6的Preview3)。所有的iPhone手機都可以正常工作。

有沒有人能夠在iPad瀏覽器上檢測即將切換的標籤?

當標籤變得活動時,Javascript的重新激活可以通過心跳循環檢測到,如this discussion of the same topic中所述。

+0

該事件在設備鎖定時也會觸發。您可以使用頁面展示,當設備解鎖並且頁面再次顯示時,將會觸發該頁面展示。 – 2013-04-05 15:07:04

+0

你試過[window.onblur](https://developer.mozilla.org/en-US/docs/Web/API/window.onblur)嗎?這可能有效。 – Uooo 2013-06-21 08:51:47

回答

1

嘗試檢查文檔上的焦點和模糊。

爲什麼你需要頁面可見性API?

  1. 可以使用存儲事件說其他頁面,誰是活躍。
  2. 您可以使用定時器(setInterval)來檢查上次定時器激發的時間。如果它比預期的更大 - 頁面被隱藏,因爲大多數瀏覽器停止計時器,頁面被隱藏。
0

我同意Pinal:使用焦點/模糊!但我建議不要在文件上,而是在窗口上。 只需向他們註冊一個聽衆,並在那裏做你的東西。

由於http://caniuse.com/#feat=pagevisibility聲明,您要使用的功能未得到很好的實施。 (編輯:剛剛在一個小型測試案例中測試過它 - 它可以在iOS 5/6上運行 - 儘管caniuse.com聲明不同)

如果您嘗試使用計時器,可以嘗試使用requestAnimationFrame作爲setInterval 。

+0

我正在寫一個html5遊戲,當玩家離開遊戲時我暫停遊戲物理,模糊和焦點事件不會在iOS 6.1.3的safari中爲我射擊,例如。 '$(window).on('blur',_ pauseGame)'當我切換選項卡並返回到ios主屏幕時,事件在桌面上完美工作。 – Rob 2013-08-02 10:55:38

1

由Apple修復在iOS7。 (剛剛在iPad模擬器中試過)