舞台网络视图闪光灯在显示时呈白色



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 );

相关内容

  • 没有找到相关文章

最新更新