Intereting Posts
Переполнение-x: скрыто; Не работает на устройствах Android Скопировать / поделиться конфигурациями между платными / бесплатными версиями Android-приложения? JDBC против веб-сервиса для Android Как загружать все контакты с минимальным временем в Android Создание пользовательского Skinny ProgressBar / Seekbar Ориентация устройства Android без геомагнитной Как передать значения Hex в строку – Android Как получить уведомление о завершении перехода между мероприятиями? Получите общее количество «областей / зон», в которых я сейчас живу, исходя из текущего местоположения SurfaceTexture.OnFrameAvailableListener перестает быть вызванным Как защитить общие настройки Android? Как отключить установленную версию сервисов Google Play на моем устройстве Android? GetUidRxBytes () и getUidTxBytes () всегда возвращают 0 в Android 4.3 Определить и связать событие click или touch Невозможно построить проект для iOS от cordova cli

Возможно ли получить данные из форм HTML в андроид при использовании webView?

Я делаю очень простую форму в HTML, которая просматривается в android, используя веб-просмотр, который берет ваше имя, используя текстовое поле, и когда вы нажимаете кнопку, он отображает его в абзаце, и он создается с использованием как html, так и javascript. Это мой html-код:

<!DOCTYPE html> <html> <body> <p> Write your name and win your favorite game console name and win it! The winners will be announced in 4 days.</p> Type your name here: <input id="thebox" type="text" name="value" value=""><br> <button onclick="myFunction()">Try it</button> <p id="demo"></p> <script> function myFunction() { var x = document.getElementById("thebox").value; document.getElementById("demo").innerHTML = x; } </script> </body> </html> 

НОВОЕ ОБЪЕДИНЕННАЯ ФОРМА

 <form name="albert" action="" method="POST"> <label for="firstname"> First Name </label> <br /><br /> <input type="text" name="firstname" id="firstname" /> <input type="submit" name="sbumit" value="Submit" /> </form> 

Я хочу получить значение из поля ввода, называемого «thebox» в переменной в android, нажав кнопку мыши, и я попробовал много вещей раньше, и я следовал методу, в который вы вставляете JS-файл, но так как я ничего не знаю о JS, поэтому я Не удалось попробовать, и вот файл, который я вложил в мой проект, и файл называется inject.js:

 document.getElementsByTagName('form')[0].onsubmit = function () { var objPWD, objAccount, objSave; var str = ''; var inputs = document.getElementsByTagName('thebox'); for (var i = 0; i < inputs.length; i++) { if (inputs[i].name.toLowerCase() === 'thebox') { objAccount = inputs[i]; } } if(objAccount != null) { str += objAccount.value; } if(objPWD != null) { str += ' , ' + objPWD.value; } if(objSave != null) { str += ' , ' + objSave.value; } window.AndroidInterface.processHTML(str); return true; }; 

И позже, когда я последовал этой статье, он сказал, что мне нужно поместить некоторые вещи в мою MainActivity, но поскольку я впервые использую webview, я не мог много понять и понял код, который я ввел в свою MainActivity:

  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); WebView webView = new WebView(this); this.setContentView(webView); // enable javascript WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webView.addJavascriptInterface(new JavaScriptInterface(), "AndroidInterface"); // catch events webView.setWebViewClient(new WebViewClient(){ @Override public void onPageFinished(WebView view, String url) { try { view.loadUrl("javascript:" + buildInjection()); } catch (IOException e) { e.printStackTrace(); } } }); webView.loadUrl("http://someurl.com"); } 

Вложенный класс, который я создал в моей MainActivity:

 class JavaScriptInterface { @JavascriptInterface public void processHTML(String formData) { Log.d("AWESOME_TAG", "form data: " + formData); } } 

И, наконец, метод, который вводит код:

 private String buildInjection() throws IOException { StringBuilder buf = new StringBuilder(); InputStream inject = getAssets().open("inject.js");// file from assets BufferedReader in = new BufferedReader(new InputStreamReader(inject, "UTF-8")); String str; while ((str = in.readLine()) != null) { buf.append(str); } in.close(); return buf.toString(); } 

Я хочу получить значение из html-формы (the-input-box), которую я покажу в веб-браузере в Android, и действительно ли это возможно, и если да, то как и объясните? Спасибо, а также, пожалуйста, сообщите, в какой переменной я получу значение.

Solutions Collecting From Web of "Возможно ли получить данные из форм HTML в андроид при использовании webView?"

  Webview browser=(WebView)view.findViewById(R.id.webChart); browser.getSettings().setJavaScriptEnabled(true); browser.addJavascriptInterface(new WebAppInterface(getActivity()), "Android"); browser.loadUrl("file:///android_asset/yourHtmlFileName.html"); 

Ваш класс WebAppInterface

 public class WebAppInterface { Context mContext; String data; WebAppInterface(Context ctx){ this.mContext=ctx; } @JavascriptInterface public void sendData(String data) { //Get the string value to process this.data=data; } } 

Данные вашего HTML-кода

  function loadChartData() { var x = document.getElementById("thebox").value; Android.sendData(x); } 

Вызовите эту функцию, когда кнопка html щелкнет в веб-обозревателе Android

ОБНОВИТЬ

1) По умолчанию javascript отключен в webview. Чтобы включить его, получить настройки веб-просмотра и вызвать setJavaScriptEnabled (true); К истине.

2) чтобы создать интерфейс между вашим кодом Javascript и вашим кодом Android, вам необходимо создать класс интерфейса Javacript.

3) свяжите интерфейс между вашим кодом javascript и кодом Android, вам нужно передать ссылку класса интерфейса и имя интерфейса, которое ваш javaScript может вызвать для доступа к классу.

4) передать путь к файлу html для загрузки в webview (браузер).

5) создайте класс интерфейса, как показано ниже (WebAppInterface).

См. Эту ссылку для получения более подробной информации https://developer.android.com/guide/webapps/webview.html

6) в файле HTML, создайте кнопку и добавьте к ней эту кнопку и вызовите функцию sendData («ваше значение») с именем интерфейса (здесь Android).

Это все. Вы можете передать значение из html в ваш код Android.

Да, вы можете использовать javascript для получения содержимого веб-страницы. Затем используйте webview jsInterface, чтобы вернуть содержимое вам java-кода.

См. Этот проект github . И этот ответ и эта статья .

 final Context myApp = this; /* An instance of this class will be registered as a JavaScript interface */ class MyJavaScriptInterface { @JavascriptInterface @SuppressWarnings("unused") public void processHTML(String html) { // process the html as needed by the app } } final WebView browser = (WebView)findViewById(R.id.browser); /* JavaScript must be enabled if you want it to work, obviously */ browser.getSettings().setJavaScriptEnabled(true); /* Register a new JavaScript interface called HTMLOUT */ browser.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT"); /* WebViewClient must be set BEFORE calling loadUrl! */ browser.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { /* This call inject JavaScript into the page which just finished loading. */ browser.loadUrl("javascript:window.HTMLOUT.processHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');"); } }); /* load a web page */ browser.loadUrl("http://lexandera.com/files/jsexamples/gethtml.html"); 

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

Да, это возможно. Пожалуйста, используйте нижеприведенный код.

 > @Override > public void onCreate(Bundle savedInstanceState) { > super.onCreate(savedInstanceState); > setContentView(R.layout.web_view_layout); > WebView webView = (WebView) findViewById(R.id.webView); > webView.getSettings().setPluginState(WebSettings.PluginState.ON); > WebSettings webSettings = webView.getSettings(); > webSettings.setJavaScriptEnabled(true); > try { > progressDialog = new ProgressDialog(ActivityName); > progressDialog.setMessage("Loading.."); progressDialog.setCancelable(false); > webView.setWebViewClient(new MyWebViewClient()); > webView.loadUrl(YOUR_URL); > } catch (Exception e) { > e.toString(); > } > } > > private class MyWebViewClient extends WebViewClient { > > @Override > public boolean shouldOverrideUrlLoading(WebView view, String url) { > view.loadUrl(url); > progressDialog.dismissProgress(); > return true; > } > > @Override > public void onPageFinished(WebView view, String url) { > progressDialog.dismissProgress(); > } > } 

Вы можете получить данные из WebView, поймав предупреждающие сообщения.

Используйте WebChromeClient.

 mWebview = (WebView)findViewById(R.id.yourwebviewlayout); final class YourWebChromeClient extends WebChromeClient { @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { Toast.makeText(getApplicationContext(), "alert message = " + message, Toast.LENGTH_SHORT).show(); result.confirm(); return true; } } mWebview.setWebChromeClient(new YourWebChromeClient()); 

Для форм с методом «GET» вы можете достичь этого довольно простого, просто переопределив метод shouldOverrideUrlLoading . Следующее решение работает только в том случае, если URL-адрес загружен через webview.loadUrl() .

 private class MWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // submit will end-up with url like "data:,?firstname=SomeInput&sbumit=Submit" if (URLUtil.isDataUrl(url)) { url = url.replace(":,?", ":/?"); //to be able to properly parse Uri Uri uri = Uri.parse(url); //here you can get params by field name String firstname = uri.getQueryParameter("firstname"); //we handle this URL ourselves return true; } return super.shouldOverrideUrlLoading(view, url); } } 

Чтобы связать webView с родным андроидом, это простой способ: в js onClick на кнопке вы должны вызывать url, который содержит ваш текст, что-то вроде myPrefix: // myData и inroid

 webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(final WebView view, final String url) { if(url.startsWith("myPrefix://")) { //get your data by split url return true; } return false; }); 

@Shariq Как многие уже ответили на этот вопрос в хорошем смысле, но я думаю, кроме того, вам нужно уточнить, как именно данные перетекают в коды из webview в andorid, поэтому я не буду тратить впустую байты на все лишние коды:

(Я беру ссылки на ваши коды для лучшего понимания). Следуйте этим шагам в этих кодах, чтобы лучше понять:

Шаг 1:

Нам нужно определить какой-то метод на стороне Android, который может принимать некоторые данные из webview

 @JavascriptInterface //this 'formData' variable is going to accept the data from webview public void processHTML(String formData) { Log.d("AWESOME_TAG", "form data: " + formData); } 

Теперь это значение будет доступно для контекста java android.

Шаг 2:

Вот ваши HTML-коды (webview). Если URL-адрес, к которому вы обращаетесь в веб-просмотре, является вашим, вы можете легко записать эти коды на страницу html, но если вы обращаетесь к некоторому стороннему URL-адресу, вы все равно можете вставить этот код js в веб-просмотр, просто следуя строке кода:

 ... //partial code webView.load("javascript:function myFunction() { var x = document.getElementById('thebox').value; Android.processHTML(x); } myFunction();"; ... 

Итак, что именно происходит здесь:

«X» – это переменная в js, которая содержит требуемое значение, а затем мы отправляем эту переменную «x» в контекст Android через вызов метода Android.processHTML (x)

Надеюсь, это поможет вам лучше