Webview's Html button click detection in Activity

android, html, webview

Solution

This is how i implemented:

public class FirstActivity extends Activity {

WebView mWebView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_first);

    mWebView = (WebView) findViewById(R.id.webView1);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setDomStorageEnabled(true);
    mWebView.addJavascriptInterface(new WebAppInterface(this), "Android");
    mWebView.loadUrl("file:///android_asset/html/File1.html");
}

public class WebAppInterface {

    Context mContext;

    /** Instantiate the interface and set the context */
    WebAppInterface(Context c) {
        mContext = c;
    }

    /** Show a toast from the web page */
    @JavascriptInterface
    public void nextScreen(String pro_cat_id) {

            startActivity(new Intent(mContext,
         MainActivity.class));
    }

And, in html file:

javascript: `file3.js`

function saveId(_id)
{
    localStorage.setItem("id", _id);
    Android.nextScreen(_id);
}

HTML:

<html>
    <head>
        <script type="text/javascript" src="arel/js/File3.js"></script>
    </head>
    <body>
        <button onClick="saveId('1');">1</button>
        <button onClick="saveId('2');">2</button>
    </body>
</html>

Problem

I was trying to detect the HTML button click of webview into java code(In activity). I wrote my code after rferencing Detect click on HTML button through javascript in Android WebView but is not working. My code: index.html ``` <html> <head> <script language="javascript"> function js1() { document.loginform.method="post"; document.loginform.action = "https://example.com/chechlogin.asp"; } </script> </head> <body> <form name="loginform"> <input type="text" name="empcode" value="58686" /><br/> <input type="password" name="emppassNTL" /> <input type="submit" name="submit" id="submit_id" onclick="login.performClick();" /> </form> </body> </html> ``` MainActivity.java ``` package com.example.webview; import android.os.Bundle; import android.annotation.SuppressLint; import android.app.Activity; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.Window; import android.webkit.JavascriptInterface; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; @SuppressLint("SetJavaScriptEnabled") public class MainActivity extends Activity { private EditText field; private WebView browser; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); field = (EditText)findViewById(R.id.urlField); browser = (WebView)findViewById(R.id.webView1); browser.getSettings().setJavaScriptEnabled(true); browser.setWebViewClient(new MyBrowser()); browser.loadUrl("file:///android_asset/index.html"); } @SuppressLint("JavascriptInterface") public void open(View view){ String url = field.getText().toString(); browser.getSettings().setLoadsImagesAutomatically(true); browser.getSettings().setJavaScriptEnabled(true); browser.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); browser.loadUrl(url); browser.addJavascriptInterface(new Object() { @JavascriptInterface public void performClick() { Log.d("LOGIN::", "Clicked"); Toast.makeText(MainActivity.this, "Login clicked", Toast.LENGTH_LONG).show(); } }, "login"); } private class MyBrowser extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } ``` But the performClick() method is not being called. How can I correct this error?

Original source

Related problems