Pass variable from android to javascript running in webview

I have a webview that, with the click of an Android button, loads some JavaScript into the webview. My question is, how do I go about migrating an Android variable to JavaScript when it loads.

My current code to load javascript in webview

private OnClickListener OnClick_grabit = new OnClickListener() { public void onClick(View v) { webView.loadUrl("javascript: function loadScript(scriptURL) { var scriptElem = document.createElement('SCRIPT'); scriptElem.setAttribute('language', 'JavaScript'); scriptElem.setAttribute('src', scriptURL); document.body.appendChild(scriptElem); } loadScript('http://www.pathtojavascript/javascript.js');"); } }; 

I need to pass something to javascript initialize () from Android.

+6
source share
4 answers

First of all, you need to load the script only once (your onClick loads it every time), and then call loadUrl("javascript:initialize(" + myNumber + ");")

+5
source

Java class:

 public class JavaScriptInterface { Context mContext; JavaScriptInterface(Context c) { mContext = c; } @JavascriptInterface public String getFromAndroid() { return "This is from android."; } } 

Web Browsing Code:

 WebView webView = (WebView) findViewById(R.id.webview); webView.setWebChromeClient(new WebChromeClient() {}); WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); settings.setDomStorageEnabled(true); webView.addJavascriptInterface(new JavaScriptInterface(this), "Android"); 

Html and javascript:

 <input type="button" value="Get from android" onClick="getFromAndroid()" /> <script type="text/javascript"> var myVar = null; function getFromAndroid() { myVar = Android.getFromAndroid(); alert(myVar); } </script> 
+4
source

The correct syntax that worked for me is

 StringBuilder buf=new StringBuilder("javascript:testFunction('"+bar+"','"+foo+"')"); Log.d(TAG, "returned string:"+buf.toString()); mWebView.loadUrl(buf.toString()); 
+2
source

You need to load Url into your webView, I got something like this in my previous application:

 webView.loadUrl("javascript:wrapJS.functionName("+value+","+value+")"+); 
0
source

Source: https://habr.com/ru/post/954578/


All Articles