在 Flash 中使用外部接口
Posted
技术标签:
【中文标题】在 Flash 中使用外部接口【英文标题】:Using ExternalInterface in Flash 【发布时间】:2010-10-23 12:24:22 【问题描述】:我正在尝试编辑一些 Flash 以进行外部 javascript 函数调用,但没有成功。这是我的 actionscript 2.0 代码:
//testing external .js calls
import flash.external.ExternalInterface;
//attempting to make external js call
ExternalInterface.call("createPlaylist","It's my Life!");
这是我的javascript;
function createPlaylist(mess)
alert("called createPlaylist: " + mess);
我看过很多例子,主要是对ExternalInterface.addCallback
的使用感到困惑。我不需要 javascript 来返回任何东西到 flash,所以这是必要的吗?
无论出于何种原因,我从未看到警报。有人在我的代码中看到任何问题吗?有没有我没有的ExternalInterface
库?另外,使用ExternalInterface
的最佳方法是什么(即错误检查等)提前谢谢...
【问题讨论】:
【参考方案1】:正如其他人在 cmets 中对 Johan 的帖子所说的那样,您应该首先通过检查 ExternalInterface.available 来检查外部接口是否可用。
除此之外...您如何启动 Flex 应用程序?首先,它当然必须包含在包含此 JavaScript 的包装器中。那是微不足道的。但是,如果您从本地文件系统将其作为文件启动(浏览器 URL 以 file:// 开头),那么您还必须确保 SWF 文件具有运行 JavaScript 函数所需的权限。
您必须信任 SWF 文件才能使其能够访问本地资源,例如文件或本地文件上的 JS。为此,请创建一个类似 myapp.cfg 的文件,并将文件的路径作为一行添加到该行。将此文件放在 FlashPLayerTrust 文件夹中。在 Linux 系统上,这是 ~/.macromedia/Flash_Player/#Security/FlashPlayerTrust/。
【讨论】:
【参考方案2】:ExternalInterface.addCallback 用于让 javascript 能够调用您的 Flash 应用程序。例如,如果您想要一个开始/停止视频的 html 按钮,您只需为命名方法添加回调,然后您的 js 就可以调用 [FlashObject].callback 方法名称。
我想说,在应用程序中添加 ExternalInterface 方法的最佳方式是为应用程序中的每个交互案例设置一个负责 JS 通信的类。例如:
public class ExternalVideoControl
private var video:MediaDisplay;
public function ExternalVideoControl(video:MediaDisplay)
//ExternalInterface.addCallback - one callback for each method you want to expose, pointing to a method within this class;
//add listeners on the video player and point them to methods in this class, for example onProgress
public function playVideo():void
//play the video on the mediaDisplay
private function onProgress(event:ProgressEvent):void
//ExternalInterface.call - report progress back to javascript
要更直接地测试 ExternalInterface,请尝试调用
ExternalInterface.call("alert", "Hello World!");
【讨论】:
谢谢,这是我认为回调方法的用途。关于为什么我没有看到警报(在我的代码中)的任何想法? 尝试跟踪 ExternalInterface.available 属性。它会告诉您闪存是否在允许 ExtInt 调用的容器中运行。阅读更多@livedocs.adobe.com/flex/2/langref/flash/external/… 有这样的东西吗? //测试外部 .js 调用 import flash.external.ExternalInterface; //外部接口可用吗? var isAvailable:Boolean = ExternalInterface.available;跟踪(可用);运行此程序时我应该寻找什么? 抱歉,不知道如何发布代码。有人能读懂吗? 您应该寻找 isAvailable 是否为真。如果不是 - 那是你的问题。以上是关于在 Flash 中使用外部接口的主要内容,如果未能解决你的问题,请参考以下文章
STM32CubeMX学习笔记(48)——USB接口使用(MSC基于外部Flash模拟U盘)
STM32CubeMX学习笔记(48)——USB接口使用(MSC基于外部Flash模拟U盘)
STM32CubeMX学习笔记(47)——USB接口使用(MSC基于内部Flash模拟U盘)