14

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

3
  • Possible duplicate of How to pass JSON-formatted data from a WebView to a HTML page Commented May 18, 2017 at 17:43
  • Why is it necessary for you to pass data to a webview? Commented Jun 27, 2017 at 6:13
  • Have you tried using setDomStorageEnabled? Commented May 10, 2019 at 10:19

3 Answers 3

23
+25

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>
Sign up to request clarification or add additional context in comments.

4 Comments

How to get JSInterface if website is in angular (typescript)?
I am getting below exception java.lang.RuntimeException: Stub! at android.content.Context.<init>(Context.java:4) at android.content.ContextWrapper.<init>(ContextWrapper.java:5) at android.view.ContextThemeWrapper.<init>(ContextThemeWrapper.java:5) at android.app.Activity.<init>(Activity.java:6) at main.java.tools.MyWebView.<init>(MyWebView.java:8)
@AndréLuizReis - Can you please share the code snippet. Currently looking to pass local storage value for appium test
@Alex Nikulin hellooo, could you please help me at stackoverflow.com/questions/63498385/… similar with this
2

How can Android webview write onto the HTML5 localstorage?

   localStorage.setItem("data", value);

Note: With local storage, web applications can store data locally within the user's browser. HTML local storage; better than cookies.
Try addJavaScriptInterface() to bind your android class and webpage.

Comments

-3

You can do it by Location Hash Property of javascript..

Android Code may look like this

WebView myWebView = (WebView) findViewById(R.id.myWebView);  
myWebView.loadUrl("http://www.example.com/#any_value");
myWebView.setWebViewClient(new MyWebViewClient());

And Javascript code look like this

var x = location.hash; //this will access the hash value you pass in url
localStorage.setItem("save_my_value", x);

3 Comments

Its not working! I wand android transferring some data, like some string, the js code i wrote in that html page, not the other way around
i don't want to reload entire page each time i pass a new value
@WaterfrVilla both variants loadUrl with hash and just url like javascript:, will not reload your page

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.