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

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

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

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

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

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

 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:

          

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

  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

      

Больше информации здесь: https://developer.android.com/guide/webapps/webview.html#BindingJavaScript

Вам нужно создать и передать интерфейс 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 (), как показано ниже:

  

Теперь в 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; } } 

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

  • Заполнение Spinner из базы данных SQLite Android
  • Проблема с отсутствием памяти Ошибка ImageView
  • Сначала аутентификация с использованием Facebook, а затем Google вызывает ошибку в Firebase для Android.
  • Как установить фоновый рисунок кнопки изображения для разных состояний?
  • Сравнение сетевых библиотек Android: OkHTTP, Retrofit и Volley
  • Как установить шрифт для меню «Параметры»?
  • Как установить Spannable object font с пользовательским шрифтом
  • Android: как установить событие onClick для кнопки в элементе списка в ListView
  • Как нарисовать заполненный многоугольник?
  • Класс api v2 Google Maps не найден
  • Получить всех друзей пользователя с помощью API-интерфейса Facebook - Android
  • Давайте будем гением компьютера.