Заменить для ALLOW_KEYBOARD_INPUT полный экран javascript
Я искал в Интернете по какой-то причине, почему мой полноэкранный javascript не работает в Safari, но все же работает в браузере webkit Chrome. Кажется, что сафари не поддерживает надстройку element.ALLOW_KEYBOARD_INPUT
для webkitRequestFullScreen
.
function cancelFullScreen(el) {
var requestMethod = el.cancelFullScreen || el.webkitCancelFullScreen || el.mozCancelFullScreen || el.exitFullscreen;
if (requestMethod) { // cancel full screen.
requestMethod.call(el);
} else if (typeof window.ActiveXObject !== "undefined") { // Older IE.
var wscript = new ActiveXObject("WScript.Shell");
if (wscript !== null) {
wscript.SendKeys("{F11}");
}
}
}
function requestFullScreen(el) {
// Supports most browsers and their versions.
var requestMethod = el.requestFullScreen || el.webkitRequestFullScreen(el.ALLOW_KEYBOARD_INPUT) || el.mozRequestFullScreen || el.msRequestFullScreen;
if (requestMethod) { // Native full screen.
requestMethod.call(el);
} else if (typeof window.ActiveXObject !== "undefined") { // Older IE.
var wscript = new ActiveXObject("WScript.Shell");
if (wscript !== null) {
wscript.SendKeys("{F11}");
}
}
return false
}
function toggleFull() {
var elem = document.body; // Make the body go full screen.
var isInFullScreen = (document.fullScreenElement && document.fullScreenElement !== null) || (document.mozFullScreen || document.webkitIsFullScreen);
if (isInFullScreen) {
cancelFullScreen(document);
} else {
requestFullScreen(elem);
}
return false;
}
Кто-нибудь знает способ заставить сафари принимать полноэкранный режим, но все же способен обрабатывать ввод с клавиатуры?
Ответы
Ответ 1
Согласно Apple documentation, это должно работать в Safari 5.1 и позже, но, очевидно, это не так. Я подал отчет об ошибке с Apple (который они не публикуют), и ответ был следующим:
Инженерия определила, что эта проблема ведет себя так, как предполагалось, на основе следующего: Мы намеренно отключили доступ к клавиатуре в полноэкранном режиме по соображениям безопасности.
Я ответил, что, по крайней мере, обновил документацию и как-то обнаружил отсутствие поддержки функций. Я буду обновлять здесь, если я получу ответ.
К сожалению, нет хорошего способа даже обнаружить функцию, поскольку element.ALLOW_KEYBOARD_INPUT
определяется в Safari, а вызов функции с этим флагом не вызывает ошибку. Единственная оставшаяся опция - проанализировать строку пользовательского агента (попробуйте эту библиотеку).
Очевидно, что Apple еще не документирует, какая версия поддерживает это, но в соответствии с этим она перестала работать с версии v.1.1.2. Это оставило бы очень малое количество людей, использующих 5.1, не исправляемых, если бы они вообще вообще работали. Поэтому, вероятно, даже не стоит обнаруживать версию.
В качестве резервной копии я хотел бы расширить желаемый элемент DOM, чтобы заполнить окно браузера, установив высоту и ширину CSS на 100% и положение "фиксированное" или "абсолютное".
Обновление: Похоже, что документация исправлена и больше не упоминает флаг ALLOW_KEYBOARD_INPUT
.
Ответ 2
Это исправлено в Safari 10.1!
В разделе "Поведение браузера Safari".