0

ウィンドウをフルスクリーンにするために、次のコード セグメントを作成しました。

docElm.requestFullscreen();

同じウィンドウで開く URL を開くと、新しい URL によってウィンドウがフルスクリーンから外れます。次のURLに移動するには、次を使用します。

window.location.assign("/settings");

この問題を修正して、ウィンドウを全画面表示のままにする方法を教えてください。

4

1 に答える 1

1

これは問題ではなく、予期されることです。

これには 2 つの理由があります。

テクニカル

フルスクリーン モードがバインドされているドキュメントまたはその要素の 1 つが、新しいサイトに移動するときに使用できなくなっているか、有効ではありません。ドキュメントまたは要素が参照されていないため、ブラウザは通常モードに戻ります。

ブラウザーのフルスクリーン モードは、ActiveX やビデオ プレーヤーなどで見られるような実際のフルスクリーン モードではありません。それらは、画面のフルサイズで表示される単純な要素オーバーレイです (たとえば、ブラウザーによって内部的に定義された CSS ルールによって)。これにより、現在の DOM とドキュメントへの依存関係が作成されます。

新しいサイトは必ずしも同じ要素を同じ順序で持つ必要はなく、ブラウザの観点からはまったく新しい DOM ツリーです。

安全

フルスクリーン モードは現在の URL に対してのみ許可されており、サイトごとにユーザーが許可する必要があります。

ユーザーが現在のサイトを許可し、次のサイトは許可しないとします。ソリューションがユーザーをフルスクリーン モードで 2 番目のサイトに誘導できる場合、ソリューションはユーザーの設定に違反します。

現在のフルスクリーン API ドキュメントでは、セクション 4 の下で見つけることができます。フルスクリーン モードを確立する基準の 1 つ:

以前に確立されたユーザー設定、セキュリティ リスク、またはプラットフォームの制限があります。

基準のこの最初の部分は、ユーザーがフルスクリーン モードを許可せずにブラウザーが新しい URL に移動した場合には満たされません。

もちろん、これは、新しくナビゲートされたサイトが、許可されるまでフルスクリーン モードで表示されないことを意味します。

これは次の理由で重要です

ユーザー エージェントは、たとえばオーバーレイを使用して、何かがフルスクリーンで表示されていることをエンド ユーザーが認識できるようにする必要があります。ユーザー エージェントは、常に機能するフルスクリーンを終了する手段を提供し、これをユーザーに通知する必要があります。これは、全画面表示時にユーザー エージェントまたはオペレーティング システム環境を再作成することによって、サイトがエンド ユーザーになりすますのを防ぐためです。requestFullscreen() の定義も参照してください。

埋め込みコンテンツが全画面表示にならないようにするために、HTML iframe 要素の allowfullscreen 属性を介して特に許可された埋め込みコンテンツのみが全画面表示にできます。これにより、信頼できないコンテンツが全画面表示になるのを防ぎます。

セキュリティ上の問題が関係しているため、URL を変更するときにブラウザーがフルスクリーン モードを継続できないのはそのためです。

Fullscreen APIは現在実験段階にあります。

考えられる回避策

AJAX を介してコンテンツを提供し、ページを更新できます。

ユーザーがさまざまなサイトをフルスクリーン モードで閲覧できるようにすることが目的の場合は、ブラウザ レベルでこれを解決する必要があります。何らかの方法で .Net WebBrowser for IE または WebKit のようなエンジンを実装するアプリケーションを作成するか、既存の WebKit ブラウザをフォークして、この動作をソース レベルでオーバーライドします。

その後、ブラウジングを全画面表示モードで自由に許可できます。

于 2013-08-30T06:11:59.587 に答える