Определение HTML-клика веб-браузера в действии (код Java)

Я пытался обнаружить щелчок кнопки html webview в java-код (In activity).
Я упомянул другое SO
Обнаруживать нажмите кнопку HTML через javascript в Android WebView

Но не работает. Мой код:

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; } } 

Но метод performClick () не вызывается.
Исправьте ошибку.

Solutions Collecting From Web of "Определение HTML-клика веб-браузера в действии (код Java)"

Вот как я реализовал:

 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)); } 

И, в html файле:

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> 

Попытайтесь воспроизвести это

  browser.addJavascriptInterface(new Object() { @JavascriptInterface public void performClick() { Log.d("LOGIN::", "Clicked"); Toast.makeText(MainActivity.this, "Login clicked", Toast.LENGTH_LONG).show(); } }, "login"); 

к этому

 Button btnLogin=new Button(ctx); btnLogin.setOnClickListener(this); browser.addJavascriptInterface(btnLogin,"login"); @Override public void onClick(View v) { //do Something } 

И в 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="btnLogin.performClick();" /> 

Вам нужно создать и передать интерфейс JavaScript с Android на JavaScript. Затем вы можете использовать этот интерфейс в качестве моста для передачи вызовов функций с помощью аргументов.

Подробнее и примеры здесь: http://developer.android.com/guide/webapps/webview.html#BindingJavaScript

По электронной почте Ой !!!
Метод performClick () был в неправильном месте.
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 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; } } 

В html сначала сделайте кнопку с именем BtnLogin с методом performClick (), как показано ниже:

 <input type="submit" name="submit" id="submit_id" onclick="BtnLogin.performClick();" /> 

Теперь в Android (Activity или Fragment) вы будете использовать код ниже:

 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; } } 

Надеюсь, это поможет.

  WebView browser = new WebView(this); browser.getSettings().setJavaScriptEnabled(true); browser.loadUrl("file:///android_asset/page.html"); setContentView(browser); WebSettings ws = browser.getSettings(); ws.setJavaScriptEnabled(true); browser.addJavascriptInterface(new Object() { @JavascriptInterface // For API 17+ public void performClick(String strl) { Toast.makeText (MainActivity.this, strl, Toast.LENGTH_SHORT).show(); onClick(); } }, "ok"); 

Файл page.html

 First name: <input type="text" name="fname" id="txtfname"><br> Last name: <input type="text" name="lname" id="txtlname"><br> <script> function getValues() { document.getElementById("btnOK").value = document.getElementById("txtfname").value+" "+document.getElementById("txtlname").value; } </script> <button type="button" value="" id="btnOK" onclick="getValues();ok.performClick(this.value);">OK</button>