diff --git a/src/puppet-web-bridge.js b/src/puppet-web-bridge.js index 7c4ae0f1820bbc25e78385406fb95250503ff559..49eaa9a6fd4943d56bdde9342247c13ce2ed1f64 100644 --- a/src/puppet-web-bridge.js +++ b/src/puppet-web-bridge.js @@ -111,8 +111,21 @@ class Bridge { * Proxy Call to Wechaty in Bridge */ proxyWechaty(wechatyFunc, ...args) { - //const args = Array.prototype.slice.call(arguments, 1) - const argsJson = JSON.stringify(args) + function escape (key, val) { + if (typeof(val)!="string") return val; + return val + .replace(/[\\]/g, '\\\\') + .replace(/[\/]/g, '\\/') + .replace(/[\b]/g, '\\b') + .replace(/[\f]/g, '\\f') + .replace(/[\n]/g, '\\n') + .replace(/[\r]/g, '\\r') + .replace(/[\t]/g, '\\t') + .replace(/[\"]/g, '\\"') + .replace(/\\'/g, "\\'") + } // http://stackoverflow.com/a/14137856/1123955 + const argsJson = JSON.stringify(args, escape) + const wechatyScript = `return (Wechaty && Wechaty.${wechatyFunc}.apply(undefined, JSON.parse('${argsJson}')))` log.silly('Bridge', 'proxyWechaty: ' + wechatyScript)