Обнаруживать нажмите кнопку HTML через javascript в Android WebView

Я не очень хорошо знаком с javascript, но я думаю, что это лучший способ выполнить мою задачу. Если нет, пожалуйста, поправьте меня.

У меня есть текст лицензии 2 кнопки в конце. Все это написано в HTML в WebView потому что в лицензии есть некоторые ссылки. Теперь я хочу, чтобы, когда пользователь нажимает кнопку «ok» в WebView , это вызывает некоторый javascript или прослушиватель, который я могу захватить на Java, чтобы запустить Intent для продвижения вперед в приложении. (Кнопка отмены будет делать наоборот, но если я знаю, как это сделать, я могу сделать другое.;))

Это кому-то звонит? Любое объяснение или образец кода приветствуются.

Solutions Collecting From Web of "Обнаруживать нажмите кнопку HTML через javascript в Android WebView"

После некоторого чтения я, наконец, получил это самостоятельно. Трудно, когда вы ничего не знаете о javascript и когда документ довольно тонкий по этому вопросу.
Вот мое решение, надеюсь, что это поможет другим:

С HTML-страницей, содержащей две кнопки в конце:

 <div> <button type="button" id="ok" style="font-weight: 700; margin-right: 20px;" onclick="validClick();">J'accepte</button> <button type="button" id="no" onclick="refuseClick();">Je refuse</button> </div> 

Я посылаю событие щелчка на javascript в верхней части моей страницы HTML:

 <script language="javascript"> function validClick() { valid.performClick(); document.getElementById("ok").value = "J'accepte"; } function refuseClick() { refuse.performClick(); document.getElementById("no").value = "Je refuse"; } </script> 

valid и refuse – это два java-объекта, которые я прошел через интерфейс javascript, чтобы использовать их методы. Поэтому в java я создал две кнопки (не отображаемые в Activity, только здесь для их методов и являются тенями кнопок HTML:

 valid = new Button(ctx); valid.setOnClickListener(this); refuse = new Button(ctx); refuse.setOnClickListener(this); 

Затем я добавил javascript в свой WebView :

 // Enablejavascript WebSettings ws = wv.getSettings(); ws.setJavaScriptEnabled(true); // Add the interface to record javascript events wv.addJavascriptInterface(valid, "valid"); wv.addJavascriptInterface(refuse, "refuse"); 

И, наконец, обработайте события click в методе onClick:

 @Override public void onClick(View v) { if (v.equals(valid)) { //do Something } else if (v.equals(refuse)) { //do Something else } } 

Надеюсь, это поможет некоторым людям

Вот более простое решение. На стороне Java создайте слушателя для каждой кнопки. Это не обязательно должен быть какой-либо конкретный класс, так как метод будет искать с помощью отражения:

 WebSettings ws = wv.getSettings(); ws.setJavaScriptEnabled(true); wv.addJavascriptInterface(new Object() { public void performClick() { // Deal with a click on the OK button } }, "ok"); 

Затем в HTML вызовите его непосредственно из тега кнопки:

 <button type="button" onclick="ok.performClick();">OK</button> 

Если вы также хотите получить значение кнопки.

Ява:

 WebSettings ws = wv.getSettings(); ws.setJavaScriptEnabled(true); wv.addJavascriptInterface(new Object() { @JavascriptInterface // For API 17+ public void performClick(String strl) { stringVariable = strl; Toast.makeText (YourActivity.this, stringVariable, Toast.LENGTH_SHORT).show(); } }, "ok"); 

HTML:

 <button type="button" value="someValue" onclick="ok.performClick(this.value);">OK</button> 
  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(); } }, "ok"); 

Файл page.html

 <html> <body> 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> </body> </html>