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时,将使用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,可能会在第一时间解决整个问题,但我怀疑这不会很快发生。
部分解决所以这个问题仍然存在,当我最初加载的阶段Web视图,但我已经设法尽量减少其外观在应用程序使用。
问题的一个主要部分是我如何重置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并加载一个空白页面,而它从视图隐藏,以停止任何音频播放。这很容易完成,只需加载一个简单的字符串。
尽管有时我仍然会看到白色闪光,但它的出现是最小的
private var webView : StageWebView;
webView = new StageWebView( true );
webView.stage = this.stage;
webView.viewPort = new Rectangle( 0, 0, 1024, 768 );