129 lines
3.7 KiB
ActionScript
129 lines
3.7 KiB
ActionScript
|
package {
|
|||
|
import flash.display.MovieClip;
|
|||
|
import flash.external.ExternalInterface;
|
|||
|
import flash.utils.getQualifiedClassName;
|
|||
|
import flash.utils.setTimeout;
|
|||
|
|
|||
|
|
|||
|
public class Test extends MovieClip {
|
|||
|
public function Test() {
|
|||
|
log("ExternalInterface.available: " + repr(ExternalInterface.available));
|
|||
|
log("ExternalInterface.objectID: " + repr(ExternalInterface.objectID));
|
|||
|
|
|||
|
try {
|
|||
|
ExternalInterface.addCallback("callMethodImmediately", function(name: String) {
|
|||
|
log("callMethodImmediately called with " + arguments.length + " argument" + (arguments.length == 1 ? "" : "s"));
|
|||
|
log(" " + repr(arguments, " "));
|
|||
|
try {
|
|||
|
log(" call(" + name + ", ...) = " + repr(ExternalInterface.call.apply(null, arguments)));
|
|||
|
} catch (e) {
|
|||
|
log(" call(" + name + ", ...) = " + e);
|
|||
|
}
|
|||
|
});
|
|||
|
ExternalInterface.addCallback("callMethodWithDelay", function(name: String) {
|
|||
|
log("callMethodWithDelay called with " + arguments.length + " argument" + (arguments.length == 1 ? "" : "s"));
|
|||
|
log(" " + repr(arguments, " "));
|
|||
|
var args = arguments;
|
|||
|
setTimeout(function() {
|
|||
|
try {
|
|||
|
log(" call(" + name + ", ...) = " + repr(ExternalInterface.call.apply(null, args)));
|
|||
|
} catch (e) {
|
|||
|
log(" call(" + name + ", ...) = " + e);
|
|||
|
}
|
|||
|
}, 1);
|
|||
|
});
|
|||
|
ExternalInterface.addCallback("log", function() {
|
|||
|
log("log called with " + arguments.length + " argument" + (arguments.length == 1 ? "" : "s"));
|
|||
|
log(" " + repr(arguments, " "));
|
|||
|
});
|
|||
|
ExternalInterface.addCallback("returnAValue", function(value: *) {
|
|||
|
log("returnAValue called with " + repr(value));
|
|||
|
log(" " + repr(arguments, " "));
|
|||
|
return value;
|
|||
|
});
|
|||
|
ExternalInterface.addCallback("throwAnException", function() {
|
|||
|
log("throwAnException called");
|
|||
|
throw new ArgumentError("Custom Argument Error!", 123);
|
|||
|
});
|
|||
|
ExternalInterface.addCallback("setMarshallExceptions", function(value: Boolean) {
|
|||
|
log("setMarshallExceptions called with " + repr(value));
|
|||
|
ExternalInterface.marshallExceptions = value;
|
|||
|
});
|
|||
|
} catch (e) {
|
|||
|
log("Error adding callbacks: " + e);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function log(value: *) {
|
|||
|
trace(value);
|
|||
|
result.text += value + "\n";
|
|||
|
}
|
|||
|
|
|||
|
function repr(value: *, indent: String = " ") {
|
|||
|
if (value === undefined || value === null || value === true || value === false || value is Number) {
|
|||
|
return value;
|
|||
|
} else if (value is String) {
|
|||
|
return escapeString(value);
|
|||
|
} else if (value is Array) {
|
|||
|
if (value.length == 0) {
|
|||
|
return "[]";
|
|||
|
} else {
|
|||
|
var result = "[\n";
|
|||
|
var nextIndent = indent + " ";
|
|||
|
for (var i = 0; i < value.length; i++) {
|
|||
|
result += nextIndent + repr(value[i], indent + nextIndent) + "\n";
|
|||
|
}
|
|||
|
return result + indent + "]";
|
|||
|
}
|
|||
|
} else {
|
|||
|
var keys = [];
|
|||
|
for (var key in value) {
|
|||
|
keys.push(key);
|
|||
|
}
|
|||
|
keys.sort();
|
|||
|
|
|||
|
var result = getQualifiedClassName(value) + " {";
|
|||
|
|
|||
|
if (keys.length == 0) {
|
|||
|
return result + "}";
|
|||
|
} else {
|
|||
|
result += "\n";
|
|||
|
var nextIndent = indent + " ";
|
|||
|
for (var i = 0; i < keys.length; i++) {
|
|||
|
result += nextIndent + keys[i] + " = " + repr(value[keys[i]], nextIndent) + "\n";
|
|||
|
}
|
|||
|
return result + indent + "}";
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function escapeString(input: String): String {
|
|||
|
var output:String = "\"";
|
|||
|
for (var i:int = 0; i < input.length; i++) {
|
|||
|
var char:String = input.charAt(i);
|
|||
|
switch (char) {
|
|||
|
case "\\":
|
|||
|
output += "\\\\";
|
|||
|
break;
|
|||
|
case "\"":
|
|||
|
output += "\\\"";
|
|||
|
break;
|
|||
|
case "\n":
|
|||
|
output += "\\n";
|
|||
|
break;
|
|||
|
case "\r":
|
|||
|
output += "\\r";
|
|||
|
break;
|
|||
|
case "\t":
|
|||
|
output += "\\t";
|
|||
|
break;
|
|||
|
default:
|
|||
|
output += char;
|
|||
|
}
|
|||
|
}
|
|||
|
return output + "\"";
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|