Нажмите на элемент кнопки на странице HTML в Android WebView, используя jquery - PullRequest
0 голосов
/ 20 мая 2019

Я хочу нажать определенную кнопку на html-странице с помощью Android WebView.

У меня есть этот HTML-код:

<div class="card">
    <div class="card-header" id="block2">
        <button type="button" class="btn bld-no-btn" aria-expanded="true" aria-controls="item2" data-toggle="collapse" data-target="#item2">
            <div class="d-flex align-items-center">
                <i class="icon small blue icon-arrow pr-3" aria-hidden="true">delta_omhoog</i>
                <h3>Title of button</h3>
                    <div class="ml-auto pr-0 pr-md-3">
                        <i class="icon red px-1" title="waarschuwing">waarschuwing</i>
                </div>
            </div>
    </button>
</div>

Я разместил его здесь: http://www.jimclermonts.nl/test/

Я написал этот код, чтобы нажать кнопку

class MainActivity : AppCompatActivity() {

    lateinit var webView: WebView
    var firstTime: Boolean = true

    companion object {
        const val JAVA_SCRIPT =
            "javascript:window.HTMLOUT.processHTML('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');"
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        webView = findViewById(R.id.webView)

        initializeWebView("http://www.jimclermonts.nl/test/")
    }

    @SuppressLint("JavascriptInterface", "SetJavaScriptEnabled")
    private fun initializeWebView(url: String?) {

        class JavaScriptTokenSubstractInterface {
            @JavascriptInterface
            @SuppressWarnings("unused")
            fun processHTML(html: String) {

                // check if html is correct
                webView.loadUrl(
                    "javascript:(function() {" +
                            "document.getElementById(\"item2\").querySelectorAll(\"button\")[0].click();" +
                            "})()"
                )
            }
        }

        webView.webChromeClient = object : WebChromeClient() {
            override fun onConsoleMessage(message: String, lineNumber: Int, sourceID: String) {
                Log.d("MyApplication", "$message -- From line $lineNumber of $sourceID")
            }
        }
        webView.settings.javaScriptEnabled = true
        webView.settings.useWideViewPort = true
        webView.requestFocus(View.FOCUS_DOWN)
        webView.clearCache(true)
        webView.clearHistory()

        webView.webViewClient = object : WebViewClient() {

            override fun onPageFinished(webView: WebView?, url: String) {
                super.onPageFinished(webView, url)
                if (firstTime) {
                    firstTime = false
                    webView?.loadUrl(JAVA_SCRIPT)
                }
            }
        }

        webView.loadUrl(url)
    }
}

Androidmanifest:

<uses-permission android:name="android.permission.INTERNET" />

Пока я застрял и не могу найти решение,Я использовал метод processHTML, чтобы проверить, проходит ли HTML-код, и я использовал логическое значение, которое не вызывает запуск одной и той же страницы.

...