ExternalInterfaceでActionScriptとJavaScript間で相互にObjectを渡す。
Browser
parameter
value
ソースコードは以下の通り。
- HTML
- Source
- JavaScript
- Source
- // send Object
- function sendObject() {
- debugText("send Object to swf(ActionScript)");
- getEmbedElementByName('externalSWF').loadObject(getObject());
- }
- function getObject(name) {
- var obj = new Object();
- var arrParam = document.getElementsByName('param');
- var arrValue = document.getElementsByName('value');
- var param, value;
- for (var i = 0; i <arrParam.length; i++) {
- param = arrParam[i].value;
- value = arrValue[i].value;
- obj[param] = value;
- }
- return obj;
- }
- // load Object
- function loadObject(obj) {
- clearTextField();
- debugText("load Object from swf(ActionScript)");
- var arrParam = document.getElementsByName('param');
- var arrValue = document.getElementsByName('value');
- var i = 0;
- for (var param in obj) {
- arrParam[i].value = param;
- arrValue[i].value = obj[param];
- i++;
- }
- }
- // clear Input Text
- function clearTextField() {
- debugText("clear text field");
- var arrParam = document.getElementsByName('param');
- var arrValue = document.getElementsByName('value');
- for (var i = 0; i <arrParam.length; i++) {
- arrParam[i].value = '';
- arrValue[i].value = '';
- }
- }
- // debugText
- function debugText(str) {
- var element = document.getElementById('debugText');
- removeChildren(element);
- element.appendChild(document.createTextNode(str));
- }
- // common
- function getEmbedElementByName(name) {
- return (/*@cc_on!@*/false)? window[name]: document[name];
- }
- function removeChildren(element) {
- while (element.hasChildNodes()) element.removeChild(element.firstChild);
- }
- ActionScript
- Source
- import flash.external.ExternalInterface;
- init();
- function init() {
- setupEI();
- setupButton();
- setupTabIndex();
- }
- // ExternalInterface
- function setupEI() {
- var isAvailable = ExternalInterface.available;
- if (isAvailable) {
- debug("ExternalInterface is available");
- addCallbackEI("loadObject", null, loadObject);
- } else {
- debug("ExternalInterface is not available");
- }
- }
- function addCallbackEI(strMethodName_js, objInstance_as, fncMethod_as) {
- ExternalInterface.addCallback(strMethodName_js, objInstance_as, fncMethod_as);
- }
- function callJS(strMethodName_js, objParameter_as) {
- ExternalInterface.call(strMethodName_js, objParameter_as);
- }
- // Button
- function setupButton() {
- mcSendObject.onRelease = function() {
- sendObject();
- };
- mcSendObject.onReleaseOutside = mcSendObject.onRollOut;
- mcClearTextField.onRelease = function() {
- clearTextField();
- };
- mcClearTextField.onReleaseOutside = mcClearTextField.onRollOut;
- }
- // Tab Index
- function setupTabIndex() {
- mcSendObject.tabIndex = 1;
- mcClearTextField.tabIndex = 2;
- txtDebug.tabEnabled = false;
- var txtParam, txtValue;
- for (var i = 0; i <10; i++) {
- txtParam = this["txtParam_" + i];
- txtValue = this["txtValue_" + i];
- txtParam.tabIndex = 3 + i * 2;
- txtValue.tabIndex = 4 + i * 2;
- }
- }
- // send Ojbect
- function sendObject() {
- debug("send Object to browser(JavaScript)");
- callJS("loadObject", getObject());
- }
- function getObject() {
- var obj = new Object();
- var param, value;
- for (var i:Number = 0; i <10; i++) {
- param = this["txtParam_" + i].text;
- value = this["txtValue_" + i].text;
- obj[param] = value;
- }
- return obj;
- }
- // load Object
- function loadObject(obj) {
- clearTextField();
- debug("load Object from browser(JavaScript)");
- setObject(obj);
- }
- function setObject(obj) {
- var i = 0;
- var txtParam, txtValue;
- for (var param in obj) {
- txtParam = this["txtParam_" + i];
- txtValue = this["txtValue_" + i];
- txtParam.text = param;
- txtValue.text = obj[param];
- i++;
- }
- }
- // clear TextField
- function clearTextField() {
- debug("clear text field");
- var txtParam, txtValue;
- for (var i = 0; i <10; i++) {
- txtParam = this["txtParam_" + i];
- txtValue = this["txtValue_" + i];
- txtParam.text = "";
- txtValue.text = "";
- }
- }
- // debug
- function debug(str) {
- txtDebug.text = str;
- }
- JavaScript
- //sendObject : ObjectをSWFに渡す。
- //loadObject : ObjectがSWFから渡される。
- ActionScript
- //ExternalInterface : Browserから呼び出し可能なActionScriptのメソッドを登録する。
- //sendObject : ObjectをBrowserに渡す。
- //loadObject : ObjectがBrowserから渡される。
これ以外のメソッドはActionScript/JavaScript共にオブジェクト生成用のテキストフィールドのセットアップに使ってるだけで、ExternalInterfaceには関係ない。




