Issue
I have a webview android application which opens a web page containing some HTML5/ JavaScript code. I want to pass some values from the android side of my application to the browser side. So I thought to write onto HTML5 localstorage from Android and then the Javascript part of the web page reads the value from the localstorage.
How can Android webview write onto the HTML5 localstorage?
Or is there at all a way the android can pass some values to javascript of the page it loads? ( without having to reload the entire page) Say writing something onto HTML5 localstorage and then the javascript code reads that thing from HTML5 localstorage
its different from how to pass json formatted data from a webview to a html page. I need a way of writing onto HTML5 localstorage by android
Solution
Pass variables like a string stackoverflow post:
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
String key = "hello";
String val = "world";
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
webView.evaluateJavascript("localStorage.setItem('"+ key +"','"+ val +"');", null);
} else {
webView.loadUrl("javascript:localStorage.setItem('"+ key +"','"+ val +"');");
}
}
});
The second variant is to use JavaScriptInterface
Init section
JavaScriptInterface jsInterface = new JavaScriptInterface(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(jsInterface, "JSInterface");
JavaScriptInterface
public class JavaScriptInterface {
private Activity activity;
public JavaScriptInterface(Activity activiy) {
this.activity = activiy;
}
public string getData(String someParameter){
//also you can return json data as string and at client side do JSON.parse
if (someParameter == "give me data" && this.activity.data != null) {
return this.activity.data;
}else{
return null;
}
}
}
Js section
<script>
function ready() {
var data = window.JSInterface.getData("give me data");
localStorage.put("give me data", data)
};
document.addEventListener("DOMContentLoaded", ready);
</script>
Answered By - Alex Nikulin
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.