3

我在 Flex Mobile 4.6 (Flash Builder 4.6) 上显示 StageWebView 时遇到问题,当我动态创建它时,事件被正确调用但什么都不可见,这是我的代码:

<components:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
             xmlns:s="library://ns.adobe.com/flex/spark" 
             xmlns:components="spark.components.*" 
             actionBarVisible="false"
             title="ActivityView"
             creationComplete="init()"
             >
<components:layout>
    <s:BasicLayout/>
</components:layout>
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
    <![CDATA[
        private var webView:StageWebView;

        protected function init():void {
            webView = new StageWebView();
            webView.stage = this.stage;
            webView.viewPort = new Rectangle(5, 20, screen.width-10, screen.height-40);
            webView.addEventListener(Event.COMPLETE, onURLLoadComplete);
            webView.addEventListener(LocationChangeEvent.LOCATION_CHANGE, onLocationChange);
            webView.loadURL("http://google.com");
        }

        protected function onURLLoadComplete(event:Event):void
        {
            trace("Load Complete");
        }

        protected function onLocationChange(event:LocationChangeEvent):void
        {
            trace("Location change: " + event.location);
        }

    ]]>
</fx:Script>
</components:View>
4

5 回答 5

0

您可以改用 FlexGlobals.topLevelApplication.stage,因此:

webView.stage = FlexGlobals.topLevelApplication.stage;

于 2013-04-04T15:05:51.467 回答
0

webView.stage = this.stage;

当它在creationComplete事件处理程序中时,this.stage仍然为空。

你应该把事件处理程序放在init()里面。addedToStage

于 2013-01-19T01:53:16.597 回答
0

我认为添加 StageWebView 最安全的方法是在 createdChildren() 中添加 StageWebView(您必须手动定义 Web 视图的宽度和高度,因为父视图的宽度和高度将为 0)或在 viewActiveEvent 状态期间。

Judah 编写了一个非常好的 WebView 类,它更易于使用http://www.judahfrangipane.com/blog/2011/01/16/stagewebview-uicomponent/

希望这可以帮助

于 2013-12-19T23:53:43.610 回答
0

您可以使用 StageWebViewBridge 来显示 HTML 和 Javascript 通信。我希望这将帮助您在 flex Web 以及 AIR 应用程序中显示 HTML。在您的代码中,没有为 StageWebView 设置阶段,您只需在 addedToStage 处理程序中分配 webView.stage = this.stage 或使用以下方法加载 html。

        private var webView:StageWebViewBridge;

        protected function addedToStageHandler(event:Event):void
        {
            StageWebViewDisk.addEventListener(StageWebviewDiskEvent.END_DISK_PARSING, onInit );
            StageWebViewDisk.setDebugMode( true );
            StageWebViewDisk.initialize(stage);
        }

        private function onInit(e:StageWebviewDiskEvent):void
        {
            if(!webView)
                webView = new StageWebViewBridge(0, 300, 900, 300);
            webView.addEventListener(StageWebViewBridgeEvent.DEVICE_READY, onDeviceReady );
            webView.addEventListener(Event.COMPLETE, onCompleteHandler);
            webView.addEventListener(ErrorEvent.ERROR, onErrorHandler);
            webView.addEventListener(LocationChangeEvent.LOCATION_CHANGING, onLocationChange);
            var _view:SpriteVisualElement = new SpriteVisualElement();
            _view.addChild(webView);
            addElement(_view);
            webView.loadURL("http://www.google.com");
        }
于 2014-02-28T07:01:44.100 回答
0

你可以像这样添加舞台......

private var _stage : Stage;

private function added_to_stage_handler():void
{
     _stage = this.stage;
     initStage();
}
private function initStage() : void
{
     webView.stage = _stage;
}
于 2014-03-29T18:24:57.633 回答