flex集成IFrame,IFrame集成UnityWebPlayer直接通讯调用解决方案

做Web开发通常是flex与JS交互,UnityWebPlayer与JS交互。它们之间相互调用比较常见。

/**
 * Flex调用Javascript函数
 * @params  functionName:String   Javascript函数名称
 * @params ...params    Javascript函数参数
 * @return  返回Javascript函数的return内容
 **/
ExternalInterface.call(functionName:String, ...params);
/**
 * Javascript调用Flex函数
 * @params   functionName:String    Javascript调用Flex函数名
 * @params   closure:Function     Flex将要调用的函数
 * @return void
 **/
ExternalInterface.addCallback(functionName:String,closure:Function);

JS调用Unity web Content函数

<script type="text/javascript" language="javascript">
<!--
//initializing the WebPlayer
var u = new UnityObject2();
u.initPlugin(jQuery("#unityPlayer")[0], "Example.unity3d");

function SaySomethingToUnity()
{
	u.getUnity().SendMessage("MyObject", "MyFunction", "Hello from a web page!");
}
-->
</script>

在Unity web player中需要有一个“MyObject”的GameObject对象,并且附加一个带有“MyFunction”函数的脚本:

function MyFunction(param : String)
{
    Debug.Log(param);
}

unity web player调用网页中JS函数:

unity中加入该脚本调用
Application.ExternalCall( "SayHello", "The game says hello!" );
在web页面中需要定义一个叫 SayHello() 函数: 

<script type="text/javascript" language="javascript">
<!--
function SayHello( arg )
{
    // show the message
    alert( arg );
}
-->
</script>

以上两种交互方式是比较常用的,最近一个项目遇到了一个特殊的应用需求。需要把unity web player的页面签入到flex应用框架中,并且完成flex与unity web player直接的交互。

为了完成这项需求需要解决如下问题:

1、如何把html页面签入到flex容器中;

2、如何实现flex与unity web player直接的通讯问题;

问题1,通过收搜得出目前flex中有一个iframe插件,可以解决。

步骤:

1、在此链接中下载现成的资料 https://github.com/flex-users/flex-iframe/downloads

我下的是最新的 flex-iframe-1.5.1.zip

解压后,在 flex-iframe-1.5.1\sources\library\flex-iframe\src\com\google\code\flexiframe  这个路径中可以找到两个AcriptScript 类文件

2、将IFrame.as、IFrameExternalCalls.as  存放在Flex项目中,我将它复制到Class文件里或者引用bin\flex-iframe-1.5.swc

3、新建立 MXML应用程序,添加红色部分代码即可, source里填充要显示的页面

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
      xmlns:flexiframe="http://code.google.com/p/flex-iframe/"
      xmlns:s="library://ns.adobe.com/flex/spark"
      xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
      xmlns:iframe="Class.*">
 <fx:Declarations>
  <!-- 将非可视元素(例如服务、值对象)放在此处 -->
 </fx:Declarations>
 <iframe:IFrame id="iFrame" source="http://www.baidu.com/" width="100%" height="100%"/>
</s:Application>

问题2,解决flex与unity web player直接通讯。

unity web player调用flex函数,关键是通过图上红色标注,其实很好理解就是iframe签入到了Flex的HTML中,通过iframe中脚本发现SwfContent对象就可以实现调用flex中的函数,实现与flex通讯。

时间: 2024-08-29 02:58:09

flex集成IFrame,IFrame集成UnityWebPlayer直接通讯调用解决方案的相关文章

flex集成IFrame,IFrame集成UnityWebPlayer直接通讯调用解决方式

做Web开发一般是flex与JS交互,UnityWebPlayer与JS交互. 它们之间相互调用比較常见. /** * Flex调用Javascript函数 * @params functionName:String Javascript函数名称 * @params ...params Javascript函数參数 * @return 返回Javascript函数的return内容 **/ ExternalInterface.call(functionName:String, ...params

3、Jenkins持续集成之持续集成

3.Jenkins持续集成之持续集成.md 配置ansible实现无密钥交互 安装阿里云YUM源码 [[email protected] ~]# cat <<EOF>>/etc/yum.repos.d/epel.repo [epel] name=epel for aliyun baseurl=https://mirrors.aliyun.com/epel/7/x86_64/ enabled=1 gpgcheck=0 [os] name=os for aliyun baseurl=h

集成开发环境,关闭Debug模式,解决方案

通过Myeclipse8.6开发Web项目时,在浏览器中输入URL之后,Myeclipse弹出debug界面,为了不弹出这个界面,解决方案为: 方案一: window->preferences->Myeclipse->Servers->Tomcat然后找到你的相应的Tomcat服务器的版本,选中然后展开其下面的子菜单会发现有个Launch选项,选中,在右侧Tomcat launch mode 中,选择Run mode 然后Apply ,最后点击OK,就行了. 方案二:去除所有的断点

iframe 简单的一个用法 局部调用

<iframe id="main_com" name="main_com" width="100%" height="750px" src="lists01.html" scrolling="yes" frameborder="0"></iframe> iframe放到你要插入页面的地方 <a href="lists35.htm

[Selenium]当DOM结构里面有iFrame,iFrame里面是html,怎么send keys to 里面的body,怎么用Assert进行验证?

我在测试的过程中遇到一个这样的问题,我无法通过CssSelector找到iFrame下边的html: <div id="mailEditorDiv" style="display: inline-block;"> <div class="maileditor"> <div style="height:130px;"> <div class="divBody">

V9发布内容时保留框架&lt;iframe&gt;&lt;/iframe&gt;

有些时候,发布文章内容的时候需要用到<iframe></iframe>框架站外内容最近在发布内容时就遇到这个问题,<iframe></iframe>给转义了,保存后变成了&gt iframe,前台显示也是这样,估计是官方为了防止安全,把script.iframe.frame都给转义了稍微修改一下,即可保留<iframe></iframe> 找到\phpcms\libs\functions\global.func.php文件,大

求给出个PLC与手机通讯的解决方案

①我这里需要通过PLC与手机通讯的解决方案,PLC能发短信吗? ②我们这边是这样的哈,我们需要那么一个设备,由PLC 给它一个开关量信号,它就能给几个固定的手机发短信,你们那有这样的设备吗? ③我们想在我们产品上加上你们的产品,达到监控我们产品的效果,一个是设备状态监控,二个是开关机的控制,全国各地都有,直接和PLC连接就可以了吧?

easyUI iframe中请求Session失效后iframe内跳转到首页的解决方案

最近用户easyUI搭了一套前端,后台是spring mvc + shiro,如果前端页面超过session过期时间再操作,iframe内的内容就会跳转到登录页面,而不是整个页面跳转到登录页. 原因:iframe内的请求因为请求超时后返回登录页面,还是会填充到iframe中. 解决方案: 1. 登录页中的body部分加入判断,载入页面时如果发现当前窗口不是顶级窗口,就将顶级窗口的内容更新为当前窗口的内容. 部分代码如下: </script> //判断当前窗口是否有顶级窗口,如果有就让当前的窗口

iframe弹出层中关闭包含iframe的div(子页面调用父页面js函数)

父页面: <div id="win2" style=" width:300px; height:200px; border:1px solid red;"> <iframe style="height:182px; width:300px;" src="1.html"></iframe> </div> js: function closeIframe(){ $("#wi