2015-12-22 4 views
5

TLDR;Как обнаружить браузер ушел в полный экран

Я могу определить, прошел ли браузер в полноэкранном режиме через полноэкранный API, но я не могу обнаружить, что браузер перешел в полноэкранный режим через f11 или в меню браузера (в частности, хром).

Оригинал:

В настоящее время я использую screenfull, чтобы перейти на полный экран и обнаружить, что браузер в полноэкранном режиме. Проблема в том, что я не хочу отображать кнопку переключения полного экрана, когда браузер перешел на полный экран через функцию браузера (то есть f11 или полный экран через меню браузера). Это связано с тем, что API-интерфейс полного экрана javascript, похоже, не может обнаружить, что вы находитесь в полноэкранном режиме или выходите из полноэкранного режима, когда вы прошли через функцию браузера. Я мог бы просто определить, был ли f11 поражен, но это не работает на Mac или когда полноэкранный режим был запущен через меню браузера.

Любые идеи о том, как определить, был ли запущен полный экран с помощью функции браузера? Я ориентируюсь только на webgl-совместимые браузеры, чтобы сократить количество ошибок.

+4

Возможный дубликат [Детектирование если браузер находится в полноэкранном режиме] (http://stackoverflow.com/questions/1047319/detecting- if-a-browser-is-full-screen-mode) – thanksd

+0

http://stackoverflow.com/questions/5617963/how-to-detect-if-user-has-enabled-full-screen-in-browser –

+0

Я могу определить, прошел ли браузер в полноэкранном режиме из полноэкранного API, но я не могу определить, прошел ли браузер в полноэкранном режиме из f11 или меню панели инструментов. – Tbonebrad

ответ

5

Я не проверял это на надежность, но это мой прием.

//without jQuery 
window.addEventListener('resize', function(){ 
    if(screen.width === window.innerWidth){ 
    // this is full screen 
    } 
}); 


    //with jQuery 
$(document).ready(function() { 
    $(window).on('resize', function(){ 
    if(screen.width === window.innerWidth){ 
     // this is full screen 
    } 
    }); 
}); 

Это, кажется, работает при нажатии на кнопку F11 и другие методы, поэтому он должен поймать крайние случаи, что полный экран апи не делает. Хотя я не уверен, что сравнение screen.width vs. window.innerWidth - это надежный способ проверки на весь экран. Возможно, кто-то еще может добавить/критиковать это.

+2

Недостаточно сравнить ширину, то же самое, когда окно максимально. Вы тоже должны сравнивать высоты, но здесь начинается веселье. В полноэкранном хромонике высота экрана и высота окна одинаковы, в IE это происходит не из-за строки состояния.Я не пробовал Firefox, но строка состояния может быть добавлена ​​с расширением. В полноэкранном режиме высота окна должна быть меньше, чем на x% меньше размера экрана. – Shanoor

+0

@ShanShan Я вижу вашу точку зрения, хотя у меня есть вопрос. OP искал краевые случаи, когда полный экран был достигнут путем нажатия «F11» или функции браузера. Если я не ошибаюсь, это не строка состояния, сжатая при переходе на полный экран таким образом? –

+0

IE всегда показывает строку состояния даже в полноэкранном режиме (я пробовал несколько минут назад), если вы полностью не отключите ее. И я тоже пытался в firefox, есть одна разница в пикселях. Это решение является хорошим началом в любом случае, это требует только некоторой настройки и тестирования. – Shanoor

3

Используйте fullscreenchange события для обнаружения полноэкранного события изменения, или если вы не хотите обрабатывать префиксы, чем вы можете также слушать resize событие (событие Изменить размер окна, который также срабатывает, когда весь экран ввод или выхода) и затем проверьте, нет ли document.fullscreenElement, чтобы определить, включен ли полноэкранный режим. Вам необходимо будет префикс поставщика fullscreenElement соответственно. Я хотел бы использовать что-то вроде этого:

var fullscreenElement = document.fullscreenElement || document.mozFullScreenElement || 
document.webkitFullscreenElement || document.msFullscreenElement; 

https://msdn.microsoft.com/en-us/library/dn312066(v=vs.85).aspx имеет хороший пример для этого, который я привожу ниже. Они использовали событие fullscreenChange, но вы можете слушать для "resize" события

document.addEventListener("fullscreenChange", function() { 
      if (fullscreenElement != null) { 
       console.info("Went full screen"); 
      } else { 
       console.info("Exited full screen");    
      } 
     }); 
+2

Это не работает, как 'fullscreenChange' событие запускается только в том случае, если вы вызываете HTML5 полноэкранный JavaScript API. Если пользователь нажимает F11, это событие не срабатывает, а 'document.fullscreenElement' (и версии префикса поставщика) остается« null ». – mc10

Смежные вопросы