Просмотр HTML-клика веб-браузера в действии (код Java)
Я пытался обнаружить щелчок кнопки html webview в java-код (In activity).
Я упомянул другое SO
Обнаруживать нажмите кнопку HTML через javascript в Android WebView
но не работает. Мой код:
index.html
- Добавление элементов в Endless Scroll RecyclerView с помощью ProgressBar внизу
- стиль андроида в коде
- API-ключ для GCM неожиданно недействителен? Несанкционированная ошибка (401)
- Получение значения цвета пикселя точки в Android-представлении, которая включает в себя canvas с поддержкой Bitmap
- Ошибка в файле strings.xml в Android
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 () не вызывается.
Исправьте ошибку.
- Запретить строку состояния для появления андроида (изменено)
- Неподдерживаемая версия major.minor 52.0 при рендеринге в Android Studio
- Как передавать данные между fragmentами
- Как создать исполняемый файл для оболочки Android
- Является ли AsyncTask действительно концептуально ошибочным или я просто что-то пропустил?
- Как сохранить изображения с помощью sharedpreference в android?
- Нанесение внешней тени при рисовании изображения
- Неподдерживаемая версия major.minor 52.0 в моем приложении
Вот как я реализовал:
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; } }
Надеюсь, это поможет.