Passing data from java class to Web View html

前端 未结 5 2088
情书的邮戳
情书的邮戳 2020-11-27 03:52

I\'m loading below html in my webView

https://mail-attachment.googleusercontent.com/attachment/?ui=2&ik=25c0c425c6&view=att&th=138db54ff27a

相关标签:
5条回答
  • 2020-11-27 04:22

    First, your URL seems not available.

    If you want to do data exchange between android app and your web app/web page you can achieve this via javascript.

    Here is an example from Android official site:

    Create a class like this:

    public class JavaScriptInterface {
        Context mContext;
    
        /** Instantiate the interface and set the context */
        JavaScriptInterface(Context c) {
            mContext = c;
        }
    
        /** Show a toast from the web page */
        @JavascriptInterface
        public void showToast(String toast) {
            Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
        }
    }
    

    In your WebView:

    WebView webView = (WebView) findViewById(R.id.webview);
    webView.addJavascriptInterface(new JavaScriptInterface(this), "Android");
    

    In your web page:

    <input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />
    
    <script type="text/javascript">
        function showAndroidToast(toast) {
            Android.showToast(toast);
        }
    </script>
    

    If you wanna pass something to your webpage, just calling corresponding javascript function:

    String str = "xxx";
    myWebView.loadUrl("javascript:xxx('"+str+"')");
    

    Here is the Reference: http://developer.android.com/guide/webapps/webview.html

    0 讨论(0)
  • 2020-11-27 04:22

    Pass the paramter directly in the url

    webView.loadUrl("file:///android_asset/animation.html?message=testing");
    

    Get the paramter in html file

    var url_string = window.location.href
    var url = new URL(url_string);
    var message= url.searchParams.get("message");
    
    0 讨论(0)
  • 2020-11-27 04:34

    Just enable DOM Storage and write var x= to string:

    webview.getSettings().setJavaScriptEnabled(true);
    web.getSettings().setDomStorageEnabled(true);
    
    webview.loadUrl(urlString);
    webview.setWebViewClient(new WebViewClient(){
    
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
    
        String js = "javascript:var x =document.getElementById('username').value = '"+user+"';var y=document.getElementById('password').value='"+pass+"';";
    
        if (Build.VERSION.SDK_INT >= 19) {
            view.evaluateJavascript(js, new ValueCallback<String>() {
                @Override
                public void onReceiveValue(String s) {
                }
            });
        }
        else {
            view.loadUrl(js);
        }
    }
    
    0 讨论(0)
  • 2020-11-27 04:38

    Be careful to call javascript function like this, the str may include single quote or other special characters.

    String str = "xxx";
    myWebView.loadUrl("javascript:xxx('"+str+"')");
    

    I suggest to encode the str in base64, and decode it on javascript side.

    • Android

      String str = "xxx";
      //encode in base64
      String base64Str = Base64.encodeToString(str.getBytes(), Base64.NO_WRAP);
      myWebView.loadUrl("javascript:xxx('"+ base64Str +"')");
      
    • Javascript

      function xxx(val) {
          //decode from base64
          var str = atob(data)
      }
      
    0 讨论(0)
  • 2020-11-27 04:43

    I would add that the load of the javascript function should be done when the html is loaded. To control that, you can use the following:

    webview.getSettings().setJavaScriptEnabled(true);
    webview.loadUrl("file:///android_asset/test.html");
    webview.setWebViewClient(new WebViewClient(){
        public void onPageFinished(WebView view, String url){   
            webview.loadUrl("javascript:init('" + theArgumentYouWantToPass + "')");
        }           
    });
    

    test.html

    <!DOCTYPE html>
    <html>
    <head>
        <title>Test</title>
    </head>
    
    <body>
    hola
    adios
    </body>
    
    <script type="text/javascript">
    
        function init(val){
    // Do whatever you want with your parameter val
        }
    </script>
    </html>
    

    Taken from Uncaught ReferenceError: myFunction is not defined at null:1 Android exception in webview

    0 讨论(0)
提交回复
热议问题