Подтвердить что ты не робот

Заменить для 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;
}

Кто-нибудь знает способ заставить сафари принимать полноэкранный режим, но все же способен обрабатывать ввод с клавиатуры?

4b9b3361

Ответ 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".