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

Popular posts from this blog

windows - Single EXE to Install Python Standalone Executable for Easy Distribution -

c# - Access objects in UserControl from MainWindow in WPF -

javascript - How to name a jQuery function to make a browser's back button work? -