Белый 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 );