2013-04-22 4 views
12

私はフルスクリーンのjavascriptがSafariでは動作しませんが、WebkitブラウザのChromeで動作する理由をインターネットで検索しています。サファリはwebkitRequestFullScreenのアドオンをelement.ALLOW_KEYBOARD_INPUTでサポートしていないようです。ALLOW_KEYBOARD_INPUTの代わりにjavacriptのフルスクリーン

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

この問題に関して、私はこのバグに遭遇しました。 Safari 8.0.6(OS X)では、既にフルスクリーンモードになっている場合、リフレッシュを実行すると、キーボードが機能し始めます。無効化されたキーの押下を示すはずのBumpサウンドも取得するので、まだ迷惑です。しかし、キーを押すことは実際に通り抜けます。 – akauppi

答えて

19

Appleのdocumentationによると、これはSafari 5.1以降で動作するはずですが、明らかにそうではありません。私は(彼らは公共のことはありません)Appleとバグレポートを提出し、次のように答えだった:

以下に基づいて意図したとおりエンジニアリングは、この問題が動作することを決定しました: 我々が意図的にキーボードアクセスを無効にしますセキュリティ上の理由からフルスクリーンで表示されます。

私は少なくともドキュメントを更新し、何らかの形で検出可能な機能サポートがないことを尋ねてきました。私が返事を受け取ったらここで更新します。

残念ながら、element.ALLOW_KEYBOARD_INPUTがSafariで定義されており、そのフラグを使用した関数呼び出しでエラーが発生しないため、機能検出を行う方法はありません。残りの唯一のオプションは、ユーザーエージェント文字列を解析することです(試してthis library)。

明らかに、Appleはどのバージョンがこれをサポートしているのかはまだ分かりませんが、thisによれば、v5.1.2からは動作しなくなりました。そうすれば、まったく動作していても5.1を使用している人の数は非常に少なくなります。おそらくバージョンを検出する価値はないでしょう。

フォールバックとして、CSSの高さと幅を100%に設定し、位置を「固定」または「絶対」に設定して、ブラウザウィンドウを埋めるために必要なDOM要素を展開します。

更新:ドキュメントは修正されており、もうALLOW_KEYBOARD_INPUTフラグは記載されていないようです。

+0

あなたがしてくれたことに大変感謝しています。全画面表示にするための主な願いは、Webアプリケーションがネイティブアプリケーションとして表示されるように、アプリケーションバーとブラウザの余白を隠すことです。どのセキュリティ上の問題が 'element.ALLOW_KEYBOARD_INPUT'に問題を引き起こす可能性がありますか – Dimser

+6

私はセキュリティ上のリスクは、サイトがあなたのブラウザと同じように見えるフルスクリーンのアプリケーションと偽のURLバーを作成し、サイト。 – brianchirls

+0

これまでの話のすばらしい概要をありがとう。これは単にChrome et.alを意味します。フルスクリーンモードが絶対に理にかなっているウェブアプリにはおすすめです。いったん全画面APIが安定すれば、Safariが群衆に加わってくれることを願っています。 – akauppi

1

これはSafari 10.1で修正されました!

「Safariブラウザの動作」セクションの下にあります。

関連する問題