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 = ''; for (const key in obj) { xml += '' + __flash__toXML(obj[key]) + ''; } return 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; } }