Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Я, наконец, получил это самостоятельно после некоторого чтения. Трудно, когда вы ничего не знаете о 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 }
}

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

Ответ 2

Здесь более простое решение. На стороне 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>

Ответ 3

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

Java:

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>

Ответ 4

    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>