北京三维动画 上海建筑动画制作 杭州CG动画制作 天津建筑三维动画 沈阳建筑动画制作 西安建筑虚拟现实 宁波Flash动画制作 深圳卡通动画 天津企业专题片 杭州影视制作
发新话题
打印

[推荐]超简单--JS与Flash的通信原理

[推荐]超简单--JS与Flash的通信原理

超简单--JS与Flash的通信原理 转自: http://www.8tops.com/113_skill_734D57E20EE8428BB4CD5FCBFF793BAE.htm 词: 1、文中出现的容器是指承载Flash的Html页面 一、JS和Flash的通信原理 先不提8以前的通信方法(BTW:因为 Molay 我也不会哈哈) 查看Flash8的内置帮助,发现了flash.external.ExternalInterface类 该类中就包含了MM给我们提供的互相通信方法 该类中有一个属性和两个方法: 属性:available:Boolean [只读],指示此播放器是否位于提供外部接口的容器中。 方法1:addCallback,将 ActionScript 方法注册为可从容器调用。意思就是允许HTML中的JS调用通过该方法注册的AS函数,使FLASH能接受外部的JS提供的数据。 方法2:call,调用由 Flash Player 容器公开的函数,传递零个或多个参数。意思就是允许FLASH使用通过该方法注册的外部JS函数,使FLASH能向外部传送数据。 首先要构造一个合适的FLASH容器(HTML) 以下是一个示例的HTML代码: 代码: 通信演示 红色部分是需要注意的 这里解释一下,因为FLASH的安全沙箱问题 所以除非服务器上承载 HTML 页,否则浏览器就会出现安全警告,而使脚本无效。 id="myFlash"和name="myFlash"是设置FLASH Objects的ID名,此参数将在JS函数中获取FLASH数据的时候使用到。 allowScriptAccess属性/参数 值: always | never | samedomain 说明: 使用 allowscriptaccess 使 Flash 应用程序可与承载它的 HTML 页通信。此参数是必需的,因为 fscommand() 和 getURL() 操作可能导致 JavaScript 使用 HTML 页的权限,而该权限可能与 Flash 应用程序的权限不同。这与跨域安全性有着重要关系。 always 允许随时执行脚本操作。 never 禁止所有脚本执行操作。 samedomain 只有在 Flash 应用程序来自与 HTML 页相同的域时才允许执行脚本操作。 所有 HTML 发布模板使用的默认值均为 samedomain。 swLiveConnect属性 值: true | false 说明: (可选)指定第一次加载 Flash Player 时浏览器是否应启动 Java。如果忽略此属性,默认值为 false。如果在同一页面上同时使用 JavaScript 和 Flash,Java 必须处于运行状态,FSCommand() 函数才能起作用。但是,如果您运行 JavaScript 只是为了检测浏览器或用于其他与 fscommand() 动作无关的目的,则可以通过将 SWLIVECONNECT 设置为 false,从而防止 Java 启动。当没有将 JavaScript 和 Flash 一起使用时,也可以通过将 SWLIVECONNECT 属性明确设置为 true,强制 Java 启动。启动 Java 会显著增加启动 SWF 文件所需的时间,因此,只有在必要时才应将此标记设置为 true。仅适用于 embed。 使用 fscommand() 动作可从独立的放映文件中启动 Java。 二、让flash调用容器中的js方法 在上面一节中我们知道了使用flash.external.ExternalInterface.call方法来调用容器中的JS 以下 Molay 给出一个示例 在该示例中,有三个按钮 分别自定义页面标题 弹出新的定义的窗口(注意使用的不是getURL();方法) 以及在容器指定位置加入输入的文本。 前两个方法很简单,所以就不详细叙述 下面 Molay 着重讲述最后一个方法的用途: JS代码: 代码: // 在容器指定位置(ID为Flash2JS)写入内容 function showContent(content){ document.getElementById("Flash2JS").innerHTML=content; } 代码将容器中标记为
的层填充入用户所输入的文本 例如你在输入框中输入"I"m Molay!"点旁边的按钮 下方的区域就将显示这个文本 也许你会想这个太简单了,有什么用处呢? 呵呵,FLASH的2880限制大家也许都知道 为了性能考虑,FLASH最大只能做2880*2880的大小 这样如果页面太大(也只有用AS做超过2880的页面),就不能显示 你不妨将底下的代码复制到框中,点“显示文本”看看 代码: HOHO~怎么样?下面显示了和上面一模一样的FLASH哦~ FLASH对于HTML元素的支持向来就是为人所诟病 如果我们使用这个方法,不仅能实现数据的无刷新显示 而且可以让HTML显示HTML,就没有什么2880和HTML元素显示问题了 三、JS到FLASH的通信 上面一节我们学会了如何使FLASH调用容器中的JS方法 本节我们将继续学习如何使容器中的JS调用FLASH中的方法 首先在FLASH里面要声明可以被JS调用的AS方法: 代码: // 注册方法showMsg flash.external.ExternalInterface.addCallback("showMsg", this, showMsg); function showMsg(str:String):Void { // 函数代码 } 在上面的代码中,我们注册了一个showMsg方法 addCallback("showMsg", this, showMsg) 第一个"showMsg"是指从 JavaScript 调用 ActionScript 函数时可使用的名称。此名称不必与 ActionScript 方法的实际名称匹配。所以你可以随便写。 第二个showMsg是指注册的方法名称(AS) 在容器中调用我们要使用以下代码来使JS访问AS方法: 代码: document["myFlash"].showMsg(str); 在上面的代码中,"myFlash"是FLASH的Object ID名,这个在第一节原理中已经讲述过。 showMsg就是addCallback的第一个参数,可以与被调用的AS函数名称无关 然后后面的str就是要传递给AS函数的参数 下面 Molay 给出一个示例,在该示例中 输入基本信息后点击提交 那么FLASH将同步显示提交的注册信息。
附件: 您所在的用户组无法下载或查看附件

TOP

[推荐]超简单--JS与Flash的通信原理

好久没上来发帖子。是好简单的
不明白请回帖
有源下载,不过下载的源文件请上传到服务器测试,本地测试是无效的

TOP

发新话题