Белый StageWebView Flash при отображении

Белый StageWebView Flash при отображении

Поэтому я работал над проектом, использующим Adobe Animate, для создания универсального приложения Air, которое можно переносить на несколько платформ, например, Mac, Windows и iOS.

Он использует StageWebView для отображения видео, встроенных в HTML-страницы, которые имеют собственный настраиваемый видеопроигрыватель html5, и все работает хорошо, за исключением одной простой, но раздражающей вещи.

Всякий раз, когда я отображаю Stage Web View, перед отображением страницы вы увидите вспышку белого цвета.

Теперь я изначально думал, что это проблема проверки завершения загрузки URL или плохо отформатированного HTML-документа, но, похоже, это не так.

Что я заметил после нескольких попыток устранить проблему, так это то, что она исчезла, если бы я использовал встроенный Air WebKit, а не собственный WebKit с настольного устройства.

(Код ниже) Вызывает белую вспышку при нагрузке:

var webView:StageWebView = new StageWebView(true);

(Код ниже) Это избавляет от проблемы, но мои HTML-теги, такие как видео и прогресс, не поддерживаются встроенным WebKit и больше не работают должным образом.

var webView:StageWebView = new StageWebView();

Информация о настройке от Adobe:

useNative: Boolean (default = false) - Когда useNative имеет значение false, в качестве источника созданного StageWebView используется версия WebKit, встроенная в AIR. Когда useNative имеет значение true, тогда AIR будет использовать веб-механизм системы по умолчанию. Мобильные платформы поддерживают только использование системного веб-движка, поэтому 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, но мне удалось минимизировать его внешний вид во время использования приложения.

Одной из основных частей проблемы было то, как я перезагружал 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 и загрузить пустую страницу, пока она скрыта от глаз, чтобы остановить воспроизведение звука. Это было достаточно легко сделать, загрузив в него простую строку.

Хотя время от времени я все еще увижу, что белая вспышка встречается минимально.

1 ответ

private var webView : StageWebView;

 webView  = new StageWebView( true );
 webView.stage = this.stage;
 webView.viewPort = new Rectangle( 0, 0, 1024, 768 );
Другие вопросы по тегам