Получить HTML элемент из веб-просмотра по клику - PullRequest
1 голос
/ 10 марта 2020

У меня проблема с веб-представлением Android.

Я пытаюсь получить элемент HTML из веб-просмотра (например, поле для заполнения).

У меня нет никакой руки в отображаемом веб-просмотре, я просто потребитель.

Я пробовал некоторые ответы из стека через поток (onTouchListener, внедрение кода JS, addJavascriptInterface ,. ..), но ничего не работает. С «hitTestResult» я сталкиваюсь с «нулем» только когда щелкаю где-то внутри веб-просмотра (даже если это поле для заполнения).

Знаете ли вы, как получить элемент HTML?

Спасибо.

Редактировать: я сильно изменил свой код, поэтому на данный момент он выглядит следующим образом:

Сначала я связываю свое мнение:

binding = MyViewBinding.inflate(layoutInflater)

И я загружаю свое веб-представление:

binding.webView.webViewClient = object: WebViewClient() {
    override fun shouldOverrideUrlLoading(
        view: WebView?,
        request: WebResourceRequest?
    ): Boolean {
        view?.loadUrl(request?.url.toString())
}
binding.webView.setOnTouchListener { view, event ->
    val hr = (view as WebView).hitTestResult
    Log.i("LOG", "getExtra = " + hr.extra + "Type= " + hr.type)
    false
}

Я также попытался: (внутри "shouldOverrideUrlLoading", я никогда не вижу тост)

view?.addJavascriptInterface(object : Any() {
    @JavascriptInterface
    @Throws(Exception::class)
    fun performClick() {
        Log.d("LOGIN::", "Clicked")
        Toast.makeText(this@MyActivity, "clicked", Toast.LENGTH_LONG).show()
    }
}, "test")

В WebViewClient объект (когда я это сделал, я установил javaScriptEnabled и domStorageEnabled в true), но обратного вызова не было:

override fun onPageFinished(view: WebView?, url: String?) {
    super.onPageFinished(view, url)

    Log.d("TAG", "test tag")
    view?.evaluateJavascript(addMyClickCallBackJs(), null)
    view?.evaluateJavascript(test(), null)
}
@JavascriptInterface
fun onData(value: String?) {
    print("value")
}

@JavascriptInterface
fun myClick(idOrClass: String) {
    Log.d("TAG", "myClick-> $idOrClass")
}

fun addMyClickCallBackJs(): String? {
    var js = "javascript:"
    js += "function myClick(event){" +
    "if(event.target.className == null){my.myClick(event.target.id)}" +
    "else{my.myClick(event.target.className)}}"
    js += "document.addEventListener(\"click\",myClick,true);"
    return js
}

fun test(): String {
    return "javascript:(function(){"+
    "l=document.getElementById('*');"+
    "e=document.createEvent('HTMLEvents');"+
    "e.initEvent('click',true,true);"+
    "l.dispatchEvent(e);"+
    "})()"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...