4

StageWebView 表示時の Flash の白

そこで私は、Adobe Animateを使用して、複数のプラットフォーム (Mac、Windows、iOS) に移植できるユニバーサル Air アプリケーションを作成するプロジェクトに取り組んできました。

StageWebView を使用して、独自のカスタム html5 ビデオ プレーヤーを備えた HTML ページに埋め込まれたビデオを表示します。1 つの単純だが面倒なことを除いて、すべてがうまく機能します。

Stage Web View を表示すると、ページが表示される前に白いフラッシュが表示されます。

当初、これは URL の読み込み完了またはフォーマットが不適切な HTML ドキュメントのチェックに関する問題だと思っていましたが、そうではないようです。

この問題を解決しようと何度か試みた結果、デスクトップ デバイスのネイティブ WebKit を使用するのではなく、組み込みの Air WebKit を使用すると問題が解決したことに気付きました。

(以下のコード) 読み込み時に白いフラッシュが発生します:

var webView:StageWebView = new StageWebView(true);

(以下のコード) これで問題は解消されますが、ビデオや進行状況などの HTML タグが埋め込み WebKit でサポートされず、適切に機能しなくなります。

var webView:StageWebView = new StageWebView();

Adobe からの設定に関する情報:

useNative :Boolean (デフォルト = false) — useNative が false の場合、AIR に埋め込まれた WebKit のバージョンが、作成された StageWebView のソースとして使用されます。useNative が true の場合、AIR はシステムのデフォルトの Web エンジンを使用します。モバイル プラットフォームはシステム Web エンジンの使用のみをサポートするため、モバイル プラットフォームでは useNative は無視されます。

イライラするのは、ロードの完了をチェックするようにリスナーを設定したことです。それでは問題が解決されません。そのため、回避策として、表示されている StageWebView を画面から非表示にしてから、その場所を必要な場所に移動しましたが、遅延が発生しましたが、これはあまり良くありません。

ピクセルが所定の位置にサイズ変更されているため、小さく表示しようとすると、問題が発生します。

/*  Check for Stage Web View Errors */
webView.addEventListener(ErrorEvent.ERROR, onError);
function onError(e:ErrorEvent):void {
    trace("Stage Web View error: " + e);
}

/*  Function to not show Stage Web View until loaded.   */
function onCompleteHandler(e:Event):void {
    webView.assignFocus();
    // Delay the Stage Web View to fix white flash issue.
    setTimeout(callWebView,500);
    webView.removeEventListener(Event.COMPLETE,onCompleteHandler);
}

/*  Multi-Function Stage Web View Loader, Just add file path string to call */
function webviewFilePath(path:String):void {
    webView.stage = this.stage;
    // Prep filepath
    filePath = new File(new File(path).nativePath).url;
    // Load file path
    webView.loadURL(filePath);
    // Add listener for Complete URL Load then Show
    webView.addEventListener(Event.COMPLETE,onCompleteHandler);
}

/*  Function to call Stage Web View independantly so it can be delayed with a timer */
function callWebView() {
    webView.viewPort = new Rectangle(posX(viewX), posY(viewY), viewWidth, viewHeight);
}

問題を軽減または修正する方法に関するヒントやヒントは素晴らしいでしょう。

もちろん、Adobe が組み込みの Air WebKit を実際に更新した場合、おそらく最初に問題全体が修正されるでしょうが、それがすぐに起こるとは思えません。

部分修正

そのため、Stage Web View を最初にロードしたときに問題はまだ存在しますが、アプリの使用中はその外観を最小限に抑えることができました。

この問題の主な部分の 1 つは、新しいページをロードする準備として、またはビューを閉じたいときに、StageWebView をリセットする方法でした。

StageWebView のオーディオは、非表示になっていても再生し続けることが知られているため、StageWebView のリセットは少しやりすぎました。

/*  Function to Reset Stage Web View    */
function resetWebView():void {
    webView.loadString("<!DOCTYPE HTML><html><body></body></html>");
    //webView.viewPort = new Rectangle(0, 0, 0, 0);
    webView.stage = null;
    //webView.viewPort = null;
}

StageWebView を非表示にし、オーディオの再生を停止するために非表示にしている間に空白のページをロードするだけでよいことに気付きました。これは、単純な文字列をロードするだけで簡単に実現できました。

時々白い閃光が見られますが、その発生は最小限です。

4

1 に答える 1