所以我一直在使用 Adobe Animate 创建一个可以移植到多个平台(即Mac,Windows和iOS)的通用Air应用程序。
它使用StageWebView显示嵌入在HTML页面上的视频,这些视频具有自己的自定义html5视频播放器,除了一个简单但烦人的事情外,一切运行良好。
每当我显示舞台网页视图时,您会在页面显示之前看到一缕白色。
现在我原本以为这是检查URL加载完成或格式不正确的HTML文档的问题,但似乎并非如此。
在尝试删除该问题的几次尝试之后我注意到的是,如果我使用嵌入式Air WebKit而不是从桌面设备使用本机WebKit,它确实消失了。
(下面的代码)加载时会导致白色闪烁:
var webView:StageWebView = new StageWebView(true);
(下面的代码)这解决了这个问题,但嵌入式WebKit不支持我的HTML标签,如视频和进度,不再正常运行。
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时,问题仍然存在,但我已设法在应用程序使用期间将其外观最小化。
问题的一个主要部分是我如何重置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并加载一个空白页面,同时它从视图中隐藏起来以阻止任何音频播放。这很容易通过加载一个简单的字符串来完成。
虽然我不时会看到白色闪光,但它的发生却很少。
答案 0 :(得分:0)
private var webView : StageWebView;
webView = new StageWebView( true );
webView.stage = this.stage;
webView.viewPort = new Rectangle( 0, 0, 1024, 768 );