【发布时间】:2017-03-30 00:12:02
【问题描述】:
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);
(下面的代码)这解决了这个问题,但是嵌入式 WebKit 不支持我的 HTML 标签(如视频和进度),并且不再正常工作。
var webView:StageWebView = new StageWebView();
来自 Adobe 的设置信息:
useNative:Boolean (default = false) — 当 useNative 为 false 时,AIR 中嵌入的 WebKit 版本将用作 已创建 StageWebView。当 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,这可能会首先解决整个问题,但我怀疑这很快就会发生。
部分修复
所以当我最初加载舞台 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 并加载一个空白页面,同时它从视图中隐藏以停止任何音频播放。这很容易通过加载一个简单的字符串来完成。
虽然有时我仍会看到白色闪光,但它的发生率极低。
【问题讨论】:
标签: actionscript-3 flash air stagewebview