这段时间一直在苦心研究Flex,今天忽然想,咱们平时都是把swf放到网页中,怎么才能把网页嵌入到Flex中呢?我查了一些资料,而后通过本身的不懈努力,终于搞定。
为了方便,写了个嵌入HTML页面的代理IFrame组件,该组件封装了全部须要的Flex端代码,后面只要经过标签调用就OK了。
IFrame.mxml文件以下:html
- <?xml version="1.0" encoding="utf-8"?>
- <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" resize="callLater(moveIFrame)" move="callLater(moveIFrame)" initialize="init();">
- <mx:Script>
- <![CDATA[
- import mx.controls.Alert;
- import flash.external.ExternalInterface;
- import flash.geom.Point;
- import flash.net.navigateToURL;
- private var __source: String;
-
-
-
-
- public function moveIFrame():void
- {
- var localPoint:Point = new Point(0, 0);
- var globalPoint:Point = this.localToGlobal(localPoint);
- ExternalInterface.call("moveIFrame", globalPoint.x, globalPoint.y, this.width, this.height);
- }
-
-
- public function set source(source: String): void {
- if (source)
- {
- if (!ExternalInterface.available)
- {
- Alert.show("The ExternalInterface is not available in this container. Internet Explorer ActiveX, " +
- "Firefox, Mozilla 1.7.5 and greater, or other browsers that support NPRuntime are required.");
- }
- __source = source;
-
- ExternalInterface.call("loadIFrame",source);
- }
- }
-
-
- public function init():void
- {
- ExternalInterface.addCallback("IFrameOnBulr",showIFrameAgain);
- }
-
-
- public function showIFrameAgain():void
- {
- this.source=this.__source;
- this.showIFrame=true;
- this.moveIFrame();
- }
-
-
- public function set showIFrame(display:Boolean):void
- {
- ExternalInterface.call("IFrameShow",display);
- }
-
- public function get source(): String {
- return __source;
- }
-
- override public function set visible(visible: Boolean): void
- {
- super.visible=visible;
- if (visible)
- {
- ExternalInterface.call("showIFrame");
- }
- else
- {
- ExternalInterface.call("hideIFrame");
- }
- }
- ]]>
- </mx:Script>
- </mx:Canvas>
- IFremaDemo.mxml文件以下:
-
- <?xml version="1.0" encoding="utf-8"?>
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:zq="*">
- <zq:IFrame mouseUp="Iframe.showIFrame=true;Iframe.moveIFrame();Iframe.source=Iframe.source" id="Iframe" source="http://weather.news.qq.com/inc/ss258.htm" x="240" y="23" width="190" height="190"/>
- </mx:Application>
固然少不了js代码,IFremaDemo.html网页是Flex Builder3自动生成的,而后须要加上如下代码:java
- <script>
- function moveIFrame(x,y,w,h) {
- var frameRef=document.getElementById("myFrame");
- frameRef.style.left=x;
- frameRef.style.top=y;
- }
- function loadIFrame(url){
- document.getElementById("myFrame").src=url;
- }
-
- function IFrameShow(display){
- document.getElementById("myFrame").style.visibility=display?"visible":"hidden";
- }
-
- function IFrameOnBulr()
- {
-
- var flash = (navigator.appName.indexOf ("Microsoft") !=-1)?window["IFremaDemo"]:document["IFremaDemo"];
-
- flash.IFrameOnBulr();
- }
- </script>
- <iframe id="myFrame" name="myFrame" onblur="this.style.visibility='visible';IFrameOnBulr();" width="189" height="190" marginwidth="0" marginheight="0" hspace="0" vspace="0" frameborder="0" scrolling="no" style="position:absolute;"></iframe>
转自:http://www.cnblogs.com/YNLDY/archive/2012/02/07/2340968.html浏览器