ExternalInterface.addCallback 함수는 파라미터를 2개 전달한다.
자바스크립트에서 인식할 함수명을 첫번째 파라미터로, 호출할 내부 플래시 함수명을 두번째 파라미터로 작성한다.
그런데 이 2개의 함수명을 똑같이 하니까 문제가 발생했다.
페이지 에러...
다르게 하면 문제가 해결된다.
하단은 자세한 내용.
<출처 : http://10year.tistory.com/125>
Flash Ocx (Shockwave Flash Object)에서 노출한 함수를 addcallback으로 노출시키려고 하면 자바스크립트 오류가 난다. IE에서만.
이름이 겹쳐서 그렇겠다 싶다.
나를 삽질하게 만든 메소드 이름은 'play', 'stop' - - ;
삽질하다 알게된 재미있는 것들.
ExternalInterface.addCallback 하면 아래와 같은 함수가 실행되어 지정한 함수가 셋팅된다.
CallFunction 은 Flash Ocx의 함수인데, 아마 '<invoke ...> ... </invoke>' 형태의 문자열을 파싱해서 플래시 전역함수를 호출해주는 역할이 아닐가 싶다.
그렇다면 addCallback이 해주는 일은,
1. addCallback으로 전달된 함수를 flash app의 전역함수로 선언해주고...
2. 위의 스크립트를 동적으로 생성, 실행시켜서 Flash Ocx 인스턴스의 함수 속성을 생성시켜준다.
그렇다면, Flash안의 전역함수는 Flash안에서 별도의 코딩이 없이도, CallFunction 함수를 이용해서 스크립트에서 호출할수 있지 않을까?
테스트 해보고 싶지만... 일단 요기까지.
-> 참지 못하고 테스트 해보니 그냥 전역함수는 아닌것 같다. - - ;
-> 검색을 해보니 이런 자료도 있네... 정말 일단 요기까지. - - ; http://flexdocs.kr/docs/flex2/docs/00001971.html
재미로 일하는게 아니니깐두루.... - - a
- 참고
addCallback이 실행될때 Flash ocx가 동적으로 생성하는 스크립트.
위의 스크립트가 제대로 실행되려면 아래 코드가 있어야 한다.
자바스크립트에서 인식할 함수명을 첫번째 파라미터로, 호출할 내부 플래시 함수명을 두번째 파라미터로 작성한다.
그런데 이 2개의 함수명을 똑같이 하니까 문제가 발생했다.
페이지 에러...
다르게 하면 문제가 해결된다.
하단은 자세한 내용.
<출처 : http://10year.tistory.com/125>
Flash Ocx (Shockwave Flash Object)에서 노출한 함수를 addcallback으로 노출시키려고 하면 자바스크립트 오류가 난다. IE에서만.
이름이 겹쳐서 그렇겠다 싶다.
나를 삽질하게 만든 메소드 이름은 'play', 'stop' - - ;
삽질하다 알게된 재미있는 것들.
ExternalInterface.addCallback 하면 아래와 같은 함수가 실행되어 지정한 함수가 셋팅된다.
function __flash__addCallback(instance, name) {
instance[name] = function () {
return eval(instance.CallFunction("<invoke name=\""+name+"\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments,0) + "</invoke>"));
}
}
CallFunction 은 Flash Ocx의 함수인데, 아마 '<invoke ...> ... </invoke>' 형태의 문자열을 파싱해서 플래시 전역함수를 호출해주는 역할이 아닐가 싶다.
그렇다면 addCallback이 해주는 일은,
1. addCallback으로 전달된 함수를 flash app의 전역함수로 선언해주고...
2. 위의 스크립트를 동적으로 생성, 실행시켜서 Flash Ocx 인스턴스의 함수 속성을 생성시켜준다.
그렇다면, Flash안의 전역함수는 Flash안에서 별도의 코딩이 없이도, CallFunction 함수를 이용해서 스크립트에서 호출할수 있지 않을까?
테스트 해보고 싶지만... 일단 요기까지.
-> 참지 못하고 테스트 해보니 그냥 전역함수는 아닌것 같다. - - ;
-> 검색을 해보니 이런 자료도 있네... 정말 일단 요기까지. - - ; http://flexdocs.kr/docs/flex2/docs/00001971.html
재미로 일하는게 아니니깐두루.... - - a
- 참고
addCallback이 실행될때 Flash ocx가 동적으로 생성하는 스크립트.
위의 스크립트가 제대로 실행되려면 아래 코드가 있어야 한다.
function __flash__arrayToXML(obj) {
var s = "<array>";
for (var i=0; i<obj.length; i++) {
s += "<property id=\"" + i + "\">" + __flash__toXML(obj[i]) + "</property>";
}
return s+"</array>";
}
function __flash__argumentsToXML(obj,index) {
var s = "<arguments>";
for (var i=index; i<obj.length; i++) {
s += __flash__toXML(obj[i]);
}
return s+"</arguments>";
}
function __flash__objectToXML(obj) {
var s = "<object>";
for (var prop in obj) {
s += "<property id=\"" + prop + "\">" + __flash__toXML(obj[prop]) + "</property>";
}
return s+"</object>";
}
function __flash__escapeXML(s) {
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
}
function __flash__toXML(value) {
var type = typeof(value);
if (type == "string") {
return "<string>" + __flash__escapeXML(value) + "</string>";
} else if (type == "undefined") {
return "<undefined/>";
} else if (type == "number") {
return "<number>" + value + "</number>";
} else if (value == null) {
return "<null/>";
} else if (type == "boolean") {
return value ? "<true/>" : "<false/>";
} else if (value instanceof Date) {
return "<date>" + value.getTime() + "</date>";
} else if (value instanceof Array) {
return __flash__arrayToXML(value);
} else if (type == "object") {
return __flash__objectToXML(value);
} else {
return "<null/>"; //???
}
}
function __flash__addCallback(instance, name) {
instance[name] = function () {
return eval(instance.CallFunction("<invoke name=\""+name+"\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments,0) + "</invoke>"));
}
}
function __flash__removeCallback(instance, name) {
instance[name] = null;
}