const __flash__toXML = function __flash__toXML(obj) {
let xml;
switch (typeof obj) {
case 'boolean':
return obj ? '' : '';
case 'number':
return '' + obj + '';
case 'object':
if (obj === null) {
return '';
}
if ('hasOwnProperty' in obj && obj.hasOwnProperty('length')) {
// array
xml = '';
for (let i = 0; i < obj.length; i++) {
xml += '' + __flash__toXML(obj[i]) + '';
}
return xml + '';
}
xml = '';
case 'string':
return ''
+ obj.replace(/&/g, '&').replace(//g, '>')
+ '';
case 'undefined':
return '';
}
};
export class ExternalInterfaceService {
public static enabled: boolean = true;
private static _interfaceID: string = 'flash';
public static callback: (functionName: string, args: any[]) => any;
public static get interfaceID(): string {
return ExternalInterfaceService._interfaceID;
}
public static set interfaceID(value: string) {
ExternalInterfaceService._interfaceID = value;
}
public static ensureInit() {
if (!window[ExternalInterfaceService._interfaceID])
window[ExternalInterfaceService._interfaceID] = {};
window[ExternalInterfaceService._interfaceID]['__flash__toXML'] = __flash__toXML;
}
public static initJS(callback: (functionName: string, args: any[]) => any) {
ExternalInterfaceService.callback = callback;
}
public static registerCallback(functionName: string) {
ExternalInterfaceService.ensureInit();
window[ExternalInterfaceService._interfaceID][functionName] = (...args)=>{
return ExternalInterfaceService.callback(functionName, args);
};
}
public static unregisterCallback(functionName: string) {
ExternalInterfaceService.ensureInit();
delete window[ExternalInterfaceService._interfaceID][functionName];
}
public static eval(expression: string): any {
ExternalInterfaceService.ensureInit();
try {
return window.eval(expression);
} catch (e) {
console.warn('[ExternalInterfaceService] Eval crashed:\n', expression, '\n' + e.message);
}
}
public static call(request: string): any {
// ...
}
public static getId(): string { return null; }
}