ASとJSは互いに通信しています
2503 ワード
開発中によくASとJSが相互作用する場面があります.例えば、ブラウザのセキュリティ制限のため、JSはクリップボードにコンテンツをコピーする時、ブラウザによって異なります.現在の比較的良い解決策はSWFの特性を利用してASのクリップボードに内容を伝えます.ここではASとJSの相互通信を実証する簡単な例を示す.
AsJsCom.as
1、htmlページで正常にアクセスできるJS方法であれば、ASでは直接External Interface.callで呼び出すことができます.他の声明は必要ありません.
2、ASの中の方法はJSに呼び出さなければならないので、External Interface.addCallbackを先に呼び出して登録してください.登録の方法はhtmlページの中でflash元素のobjectオブジェクトに結び付けられます.
3、通信の時、コール方法の所属の資源のロードが完了したことを保証します.例えば、ここのJSのASの中の方法はflashに正しいロードが完了したことを要求します.
4、なくなった.
AsJsCom.as
package {
import flash.display.Sprite;
import flash.external.ExternalInterface;
public class AsJsComm extends Sprite {
/**
*
*/
public function AsJsComm() {
// AS JS
ExternalInterface.addCallback('callback', callback);
// AS JS ( alert window alert )
ExternalInterface.call('alert', 'AS: Hello JS!');
}
/**
*
*/
public function callback(str:String):void {
// , JS
ExternalInterface.call('alert', str);
}
}
}
index.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>AsJsComm</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>
</head>
<body>
<div id="flash">
<div id="flashObj">loading...</div>
</div>
<script type="text/javascript">
(function() {
var id = 'flashObj',
width = '800',
height = '680',
version = '9.0.0',
expressInstallSwfUrl = '',
flashVars = {},
params = {
id: id,
allowScriptAccess: 'always',
allowFullScreen: 'true',
quality: 'high',
wmode: 'opaque',
bgcolor: '#000',
menu: 'false'
},
attributes = {},
callbackFn = function(data) {},
swfUrl = 'AsJsComm.swf';
swfobject.embedSWF(swfUrl, id, width, height, version, expressInstallSwfUrl, flashVars, params, attributes, callbackFn);
window.onload = function() {
// JS AS
document.getElementById(id).callback('JS: Nice to meet you AS!');
};
})();
</script>
</body>
</html>
簡単な説明:1、htmlページで正常にアクセスできるJS方法であれば、ASでは直接External Interface.callで呼び出すことができます.他の声明は必要ありません.
2、ASの中の方法はJSに呼び出さなければならないので、External Interface.addCallbackを先に呼び出して登録してください.登録の方法はhtmlページの中でflash元素のobjectオブジェクトに結び付けられます.
3、通信の時、コール方法の所属の資源のロードが完了したことを保証します.例えば、ここのJSのASの中の方法はflashに正しいロードが完了したことを要求します.
4、なくなった.