北京三维动画
上海建筑动画制作
杭州CG动画制作
天津建筑三维动画
沈阳建筑动画制作
西安建筑虚拟现实
宁波Flash动画制作
深圳卡通动画
天津企业专题片
杭州影视制作
注册
登录
会员
标签
帮助
宇风多媒体论坛
»
Flash论坛
» [推荐]超简单--JS与Flash的通信原理
‹‹ 上一主题
|
下一主题 ››
发新话题
发布投票
发布商品
发布悬赏
发布活动
发布辩论
发布视频
打印
[推荐]超简单--JS与Flash的通信原理
blueboyss
版主
Member
个人空间
发短消息
加为好友
当前离线
1
#
大
中
小
发表于 2007-12-11 15:42
只看该作者
[推荐]超简单--JS与Flash的通信原理
超简单--JS与
Flash
的通信原理 转自: http://www.8tops.com/113_skill_734D57E20EE8428BB4CD5FCBFF793BAE.htm 词: 1、文中出现的容器是指承载
Flash
的Html页面 一、JS和
Flash
的通信原理 先不提8以前的通信方法(BTW:因为 Molay 我也不会哈哈) 查看
Flash
8的内置帮助,发现了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将同步显示提交的注册信息。
附件:
您所在的用户组无法下载或查看附件
UID
11158
帖子
8116
精华
0
积分
12384
阅读权限
100
来自
广东佛山
在线时间
23 小时
注册时间
2003-5-4
最后登录
2008-9-1
查看个人网站
查看详细资料
TOP
blueboyss
版主
Member
个人空间
发短消息
加为好友
当前离线
2
#
大
中
小
发表于 2007-12-11 15:43
只看该作者
[推荐]超简单--JS与Flash的通信原理
好久没上来发帖子。是好简单的
不明白请回帖
有源下载,不过下载的源文件请上传到服务器测试,本地测试是无效的
UID
11158
帖子
8116
精华
0
积分
12384
阅读权限
100
来自
广东佛山
在线时间
23 小时
注册时间
2003-5-4
最后登录
2008-9-1
查看个人网站
查看详细资料
TOP
‹‹ 上一主题
|
下一主题 ››
互动多媒体·AIR·Web ·E-Learning技术讨论区
Authorware论坛
Authorware常见问题
Authorware扩展与开发
Authorware源程序交流
Authorware教程资源
Director论坛
Adobe Director 11
课件苑地
Director作品交流
Director扩展与开发
Director教程资源
Flash论坛
Flash常见问题
Flash源程序交流
Flash教程资源
课件制作
网页设计
网站建设教程资源
MMB论坛
虚拟现实
AIR论坛
视觉艺术 CG动画 视频 后期
影视制作
影视制作教程资源
Vegas论坛
影视制作常见问题
滤镜效果
三维动画
三维动画教程资源
编码刻录
摄影摄像
平面设计
界面设计
手绘园地
设计酷评
Photoshop论坛
CorelDraw论坛
音频处理
教程资源
社区竞技场
电脑技术 基础应用
办公软件
硬件园地
操作系统
社区杂谈
风铃茶楼
真我风采
网友聚会
创业之道
社区原创
投票中心
业界风云
招聘与求职
广告与交易
站务管理
共建论坛
控制面板首页
编辑个人资料
积分记录
公众用户组
个人空间管理
升级个人空间
基本概况
流量统计
客户软件
发帖量记录
版块排行
主题排行
发帖排行
积分排行
交易排行
在线时间
管理团队
管理统计