Intenté detectar el clic del botón html de la vista web en el código de java (En actividad).
Remití otro SO
Detectar hacer clic en el botón HTML a través de javascript en Android WebView
pero no funciona. Mi código:
index.html
function js1() { document.loginform.method="post"; document.loginform.action = "https://example.com/chechlogin.asp"; }
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; } }
Pero el método performClick () no se está llamando.
Por favor, corrige el error.
Así es como lo implementé:
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)); }
Y, en el archivo html:
javascript: file3.js
function saveId(_id) { localStorage.setItem("id", _id); Android.nextScreen(_id); }
HTML:
intenta pagar esto
browser.addJavascriptInterface(new Object() { @JavascriptInterface public void performClick() { Log.d("LOGIN::", "Clicked"); Toast.makeText(MainActivity.this, "Login clicked", Toast.LENGTH_LONG).show(); } }, "login");
a esto
Button btnLogin=new Button(ctx); btnLogin.setOnClickListener(this); browser.addJavascriptInterface(btnLogin,"login"); @Override public void onClick(View v) { //do Something }
y en index.html
Más información aquí: https://developer.android.com/guide/webapps/webview.html#BindingJavaScript
Debe crear y pasar una interfaz de JavaScript de Android a JavaScript. A continuación, puede utilizar esta interfaz como un puente para pasar llamadas a funciones con argumentos.
Más detalles y ejemplos aquí: http://developer.android.com/guide/webapps/webview.html#BindingJavaScript
Ooops!
El método performClick () estaba en el lugar equivocado.
MainActivity.java debería ser algo como esto:
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 WebView browser; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); browser = (WebView)findViewById(R.id.webView1); browser.getSettings().setJavaScriptEnabled(true); browser.getSettings().setLoadsImagesAutomatically(true); browser.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); browser.setWebViewClient(new MyBrowser()); browser.loadUrl("file:///android_asset/index.html"); } private class MyBrowser extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); view.addJavascriptInterface(new Object() { @JavascriptInterface public void performClick() throws Exception { Log.d("LOGIN::", "Clicked"); Toast.makeText(MainActivity.this, "Login clicked", Toast.LENGTH_LONG).show(); } }, "login"); 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; } }
En html, primero haga un botón con el nombre de BtnLogin con el método performClick () como se muestra a continuación:
Ahora en Android (Actividad o Fragmento) usarás el siguiente código:
private class MyBrowser extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); view.addJavascriptInterface(new Object() { @JavascriptInterface public void performClick() throws Exception //method which you call on button click on HTML page { Log.d("LOGIN::", "Clicked"); Toast.makeText(MainActivity.this, "Login clicked", Toast.LENGTH_LONG).show(); } }, "BtnLogin");// identify which button you click return true; } }
Espero que ayude