12

我一直在互联网上搜索为什么我的全屏 javascript 不能在 Safari 中工作,但在 webkit 浏览器 Chrome 中工作的原因。看来 safari 不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;
}

有人知道让 safari 接受全屏但仍能处理键盘输入的方法吗?

4

2 回答 2

19

根据 Apple 的文档,这应该可以在 Safari 5.1 及更高版本中使用,但显然不能。我向 Apple 提交了一份错误报告(他们没有公开),回复如下:

工程部门已根据以下情况确定此问题的行为符合预期:出于安全原因,我们有意禁用全屏键盘访问。

我已回复要求他们至少更新文档并以某种方式检测到缺乏功能支持。如果我得到回复,我会在这里更新。

不幸的是,甚至没有进行特征检测的好方法,因为element.ALLOW_KEYBOARD_INPUT它是在 Safari 中定义的,并且带有该标志的函数调用不会引发错误。剩下的唯一选择是解析用户代理字符串(试试这个库)。

显然,Apple 尚未记录哪个版本支持此功能,但据此它从 v5.1.2 开始停止工作。如果 5.1 甚至可以正常工作,那将留下极少数使用未修补的人。所以它甚至可能不值得检测版本。

作为后备方案,我会通过将 CSS 高度和宽度设置为 100% 并将位置设置为“固定”或“绝对”来扩展所需的 DOM 元素以填充浏览器窗口。

更新:看起来文档已更正,不再提及该ALLOW_KEYBOARD_INPUT标志。

于 2013-05-21T17:44:20.043 回答
2

这已在Safari 10.1中修复!

在“Safari 浏览器行为”部分下。

于 2017-07-25T21:17:08.257 回答