JavaScript로 Flash에 대한 개념을 증명하려고 노력해 왔습니다. 나는 ActionScript 3.0과 JQuery와 Flash CS5를 사용하고 있습니다.ExternalInterface를 통해 Flash와 Flash로 의견을 교환하는 JavaScript
나는 플래시 개발자가 아니므로 코드에 사과드립니다. 이것이 작동한다고 증명할 수 있다면 플래시는 그들이 무엇을 하는지를 아는 사람에게 주어질 것입니다.
output = new TextField();
output.y = -200;
output.x = -200;
output.width = 450;
output.height = 325;
output.multiline = true;
output.wordWrap = true;
output.border = true;
output.text = "Initializing...\n";
root.bgClip.addChild(output);
try{
Security.allowDomain("*");
flash.external.ExternalInterface.marshallExceptions = true;
output.appendText("External Interface Available? " + ExternalInterface.available + "\n");
output.appendText("External Interface ObjectId: " + ExternalInterface.objectID + "\n");
flash.external.ExternalInterface.addCallback("getMenuItems", returnMenuItems);
flash.external.ExternalInterface.addCallback("changeText", changeText);
flash.external.ExternalInterface.addCallback("changeBgColour", changeBgColour);
flash.external.ExternalInterface.call("populateMenu", returnMenuItems());
} catch (error:SecurityError) {
output.appendText("Security Error: " + error.message + "\n");
} catch (error:Error) {
output.appendText("Error: " + error.message + "\n");
}
function returnMenuItems():String{
return "[{\"menu option\": \"javascript:callFlash('changeBgColour','4CB9E4')\"}]";
}
function changeText(t:String){
root.textClip.text = t;
}
function changeBgColour(colour:String) {
var c:ColorTransform = root.bgClip.transform.colorTransform;
c.color = uint(colour);
root.bgClip.transform.colorTransform = c;
}
자바 스크립트와 HTML은 다음과 같습니다 :
function populateMenu(message){
$("#options").changeType("Options", $.parseJSON(message));
$("#options").addMenuActions();
}
function callFlash(methodToCall, param){
alert("method: " + methodToCall + ", param: " + param);
if(param == undefined){
$("#AJC")[methodToCall]();
}else{
$("#AJC")[methodToCall](param);
}
}
var flashvars = {};
var params = {allowScriptAccess: "always"};
var attributes = {name: "AJC"};
swfobject.embedSWF("http://192.168.184.128/ActionscriptJavascriptCommunication.swf", "AJC", "600", "400", "9", "", flashvars, params, attributes);
및
액션 스크립트는 루트 무비의 요소의 몇 가지로, 첫 번째 프레임에서 타임 라인에서 레이어에
<body>
<div id="wrapper">
<div id="topBar" class="top-bar"></div>
<div id="flashContainer">
<div id="AJC">Loading Flash...</div>
</div>
<ul class="dropdown" id="games"></ul>
<ul class="dropdown" id="options"></ul>
</div>
</body>
이제 ActionScript가 끔찍하다는 것을 알고 있습니다. e는 자바 스크립트에서 플래시에 접속하는 것과 관련된 가능한 문제에 대해 많은 글을 읽었습니다 (따라서 보안 도메인 * 허용 및 디버그 텍스트 상자 추가 등).
사용중인 JavaScript가 머리에있는 스크립트 태그 내에 있습니다. changeType 및 addMenuActions는 내가 추가 한 JQuery 메서드입니다. 이들은 독립적으로 테스트되었지만 작동하는 자바 스크립트 메소드 일뿐입니다.
당신은 ActionScript의 내 시도 캐치의 마지막 줄은 것을 알 수 있습니다 :
이flash.external.ExternalInterface.call("populateMenu", returnMenuItems());
이 작업은 플래시에서 전송 된 텍스트 내 메뉴를 채울 않습니다. 유일한 방법은 addCallback 함수를 사용하여 노출 된 메소드를 호출하는 것입니다.
method: changeBgColour, param: 4CB9E4
하지만 오류가 말하는 :
이Error: $("#AJC")[methodToCall] is not a function
Source File: http://192.168.184.128/test.html#
Line: 88
나는 192.168.184.128 관련 아파치를 실행하는 로컬 VM을 설정
, 궁금를
나는 말한다 경고를 얻을 이것이 문제라면, 나는 두 개의 스레드가 로컬에서 플래시와 통신하려고 시도하는 것이 작동하지 않는다는 것을 언급 한 것을 보았습니다. 그래서 제가 아파치로 VM을 설정하는 이유는 무엇입니까?
아이디어가 있으십니까? 저는 사람들이이 일을하고 있다는 것을 압니다, 매우 실망 스럽습니다.
감사합니다.
감사합니다. 문제가 정확히 무엇인지. 나는 그것을 JQuery 메서드로 마무리 할 것이므로 어디에서나 0 인덱스를 지정할 필요가 없습니다. – PDizzle