android - How to escape a JSON object to feed into a JavaScript function? -
really struggling one! i'm building android , iphone application shows webview (uiwebview on ios). webview has html page loaded in contains simple javascript function defined follows:
function parsejson(input) { alert("start of parsejson(...) javascript method"); var parsedjson = json.parse(input); alert("end of parsejson(...) javascript method"); } what want call parsejson(input) javascript function android/ios client passing in string input parameter. done follows xamarin.android:
string json = "{}" mywebview.loadurl ("javascript:parsejson(\"" + json + "\")")); and follows xamarin.ios:
string json = "{}" mywebview.evaluatejavascript ("parsejson(\"" + json + "\")"); up here, works fine. no problem. javascript function called , executes. also, know have double-escape quotation-mark character in string, follows:
string json = "{\\\"key\\\":\\\"value\\\"}"; this works fine. javascript function called , executes. double escaping "\r" , "\n" (to "\\\r" , "\\\n") works. however, if json string contains "\\", "\b", "\t" or "\f", json.parse(...) call in javascript function falls on (even if character double-escaped).
any ideas on how can reliably escape json string within client before feed javascript function?
turns out have escape parameters fed javascript function follows:
string escapejavascriptfunctionparameter(string param) { char[] chars = param.tochararray(); stringbuilder sb = new stringbuilder (); (int = 0; < chars.length; i++) { switch (chars [i]) { case '\\': sb.append ("\\\\"); break; case '\n': sb.append ("\\n"); break; case '\r': sb.append ("\\r"); break; case '\b': sb.append ("\\b"); break; case '\f': sb.append ("\\f"); break; case '\t': sb.append ("\\t"); break; default: sb.append (chars[i]); break; } return sb.tostring (); } this not complete escape method demonstrates how escape common javascript special characters.
using method, call javascript function android project follows:
string json = "{\"key\":\"value\"}"; string escapedjson = escapejavascriptfunctionparameter(json); mywebview.loadurl ("javascript:parsejson(json.stringify(" + escapedjson + "))"); and ios project follows:
string json = "{\"key\":\"value\"}"; string escapedjson = escapejavascriptfunctionparameter(json); mywebview.evaluatejavascript ("parsejson(json.stringify(" + escapedjson + "))");
Comments
Post a Comment