У меня проблема с веб-представлением 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);"+
"})()"
}