1、ActionScript调用JavaScript
call( ) 方法至少需要一个参数来指明javascript函数名称
ExternalInterface.call("changeTitle");
如果JavaScript函数本身需要参数,在call( )方法参数中继续添加,例如,changeTitle( ) 函数接受一个参数:
ExternalInterface.call("changeTitle", "ActionScript 3.0 Cookbook");
======================================================================
2、Javascript调用ActionScript
使用ExternalInterface.addCallback( ) 注册ActionScript 函数,然后在JavaScript端进行调用。
addCallback( ) 方法接收两个参数:第一个参数为String类型的函数名,浏览器将借此名称得知要调用的函数,第二参数为浏览器调用定义的函数名时要执行的实际ActionScript函数。下面的例子注册了函数displayMessage ,在JavaScript中的别名为showMessage:
ExternalInterface.addCallback("showMessage", displayMessage);
浏览器中的Flash播放器有两种类型:ActiveX(<object>标签) 和 plug-in(<embed>标签)版本
例:
<script language="JavaScript">
var flashPlayer;
function detectFlashPlayer( ) {
if(navigator.appName.indexOf("Microsoft") != -1) {
flashPlayer = window.objectId;
}
else {
flashPlayer = window.document.embedName;
}
}
</script>
//body onload
<body onLoad="detectFlashPlayer">
//调用
flashPlayer.showMessage( );
//调用带参数
flashPlayer.showMessage("example message");
=========================================================================
3、通过html中标签的param给swf传递参数
HTML部分需要在<object> 标签中添加一个<param name="FlashVars"> 标签,
在ActionScript方面,可通过任何可视化组件都有的root.loaderInfo.parameters 属性得到FlashVars传递进来的参数,root.loaderInfo.parameters 属性是一个关联数组
=========================================================================
4、下载文件
var fileReference:FileReference = new FileReference( ); var urlRequest:URLRequest = new URLRequest("http://www.myexamplesite.com/example.txt"); fileReference.download(urlRequest); //download( ) 方法的第二个参数就是指定显示在保存对话框的文件名 fileReference.download(urlRequest, "11.txt");
download( ) 方法最好放在try...catch 语句中执行,因为该方法可能会抛出异常,主要两种异常:
IllegalOperationError和SecurityError。当保存对话框已经打开的情况下调用download( )方法会抛出IllegalOperationError,SecurityError异常是由于SWF不允许下载所导致。
例:
try { fileReference.download(urlRequest, fileName); } catch (illegalOperation:IllegalOperationError) { // code to handle an illegal operation error } catch (security:SecurityError) { // code to handle a security error }
fileReference.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
=========================================================================
5、下载文件进度
fileReference.addEventListener(ProgressEvent.PROGRESS, onFileProgress);
private function onFileProgress(event:ProgressEvent):void {
fileProgressField.text = event.bytesLoaded + " of " + event.bytesTotal + " bytes";
}
当下载完成时FileReference对象发出complete事件,类型为Event :
fileReference.addEventListener(Event.COMPLETE, onFileComplete);
=========================================================================
6、浏览对话框选择的文件
一、过滤
var fileFilter1:FileFilter = new FileFilter("Images", "*.png;*.gif;*.jpg");
var fileFilter2:FileFilter = new FileFilter("Documents", "*.txt;*.doc;*.pdf;*.rtf");
var fileFilter3:FileFilter = new FileFilter("Archives", "*.zip;*.tar;*.hqx");
var fileFilter4:FileFilter = new FileFilter("All", "*.*");
_fileReference.browse([fileFilter1, fileFilter2, fileFilter3, fileFilter4]);
二、选择
当用户选择了文件并点击了Open按钮后FileReference对象会发出select事件。
fileReference.addEventListener(Event.SELECT, onSelectFile);
//selectedFileTextField.text = fileReference.name;
或
fileReference.addEventListener(Event.CANCEL, onCancelBrowse);
==========================================================================