我在 flash builder 4.6 中使用以下代码(作为 android 和 ios 的测试移动应用程序,尝试用 stagewebviewbridge 替换 stagewebview 以利用 javascript 通信优势)...
代码直接来自文档,看起来很简单,但是 webview 实例没有显示,而且我似乎只能到达控制台中显示“END_DISK_PARSING”的跟踪...
出于某种原因,DEVICE_READY 的事件监听器永远不会调用 onDeviceReady 函数...
它不会产生任何错误,控制台仅显示“End_Disk_Parsing”。我使用 FB 4.6 premium、flex sdk 版本 4.12,并尝试在 Android 设备 (HTC One) 上进行测试,并拥有 -app.xml 文件中指定的互联网权限。
有人熟悉 SWVBridge 并知道我应该在这里做什么不同的事情吗?
我已经使用了很多次默认的 stagewebview,并且非常熟悉它的工作原理,但到目前为止无法使用 stagewebviewbridge 获得任何舞台上可见的结果...
我使用的代码如下:
import es.xperiments.media.StageWebViewDisk;
import es.xperiments.media.StageWebviewDiskEvent;
import es.xperiments.media.StageWebViewBridge;
import es.xperiments.media.StageWebViewBridgeEvent;
import flash.events.Event;
import flash.events.MouseEvent;
// this is our main view
public var view:StageWebViewBridge;
public function init1():void{
// init the disk filesystem
StageWebViewDisk.addEventListener( StageWebviewDiskEvent.END_DISK_PARSING, onInit );
StageWebViewDisk.setDebugMode( true );
StageWebViewDisk.initialize( stage );
}
// Fired when StageWebviewDiskEvent cache process finish
public function onInit( e:StageWebviewDiskEvent ):void{
trace( 'END_DISK_PARSING');
// create the view
view = new StageWebViewBridge( 0,0, 320,240 );
// listen StageWebViewBridgeEvent.DEVICE_READY event to be sure the communication is ok
view.addEventListener(StageWebViewBridgeEvent.DEVICE_READY, onDeviceReady );
// load a test url...
view.loadURL('http://www.google.com');
}
public function onDeviceReady( e:Event ):void{
trace('onDeviceReady\n');
// all is loaded and ok, show the view
addChild( view );
}
最佳答案
经过一夜的 sleep 和一杯咖啡后解决了这个问题:
这段代码对我来说效果很好:
import es.xperiments.media.StageWebViewBridge;
import es.xperiments.media.StageWebViewBridgeEvent;
import es.xperiments.media.StageWebViewDisk;
import es.xperiments.media.StageWebviewDiskEvent;
import mx.core.UIComponent;
import flash.media.StageWebView;
import spark.events.ViewNavigatorEvent;
protected var webView:StageWebViewBridge;
protected function view1_addedToStageHandler(event:Event):void
{
// OPTIONAL BEFORE INIT OPTIONS SETTING
StageWebViewDisk.setDebugMode( true );
// if we need debug mode assign it before initializaton
// StageWebViewDisk Events. First time app launches it proceses the filesystem
// As it can take some time, depending of the filesize of the included files
// we provide 2 events to know when process start/finish
StageWebViewDisk.addEventListener(StageWebviewDiskEvent.START_DISK_PARSING, onDiskCacheStart);
StageWebViewDisk.addEventListener(StageWebviewDiskEvent.END_DISK_PARSING, onDiskCacheEnd);
StageWebViewDisk.initialize( this.stage );
}
protected function onDiskCacheStart(e:StageWebviewDiskEvent):void
{
trace("SWVD parsing started");
}
protected function onDiskCacheEnd(e:StageWebviewDiskEvent):void {
trace("SWVD parsing ended");
webView = new StageWebViewBridge(0, 50, 400, 450);
webView.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
SWVB.addChild(webView);
}
protected function onAddedToStage(e:Event):void
{
webView.loadURL("http://www.google.com");
//webView.loadLocalURL("applink:/index.html");
}
它还提醒我如何处理 flash builder/as3 项目中的“添加子项”错误...首先我必须向舞台添加一个“ui 组件”...
// container ( IVisualElement ) for DisplayObjects
var container:UIComponent = new UIComponent();
addElement( container );
然后我们可以向该 uicomponent 添加子组件:
container.addChild(webView);
希望这对其他人有帮助。
关于actionscript-3 - 如何使用 FB 4.6 将 stagewebviewbridge 实例添加到舞台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25707232/