Выполните JavaScript в Android Kotlin WebView, чтобы найти координаты элемента на экранеJavascript

Форум по Javascript
Ответить
Anonymous
 Выполните JavaScript в Android Kotlin WebView, чтобы найти координаты элемента на экране

Сообщение Anonymous »

У меня есть приложение для Android, которое я создаю с языком Kotlin . Я пытаюсь получить конкретный элемент на веб -странице, которую я отображаю, а затем поместить координаты элемента в переменные Kotlin . В моем случае я отображаю страницу на YouTube и пытаюсь получить координаты видеоплеера (позже я буду отображать кнопку над ней). Я использую следующий код для инициализации моего WebView :

Код: Выделить всё

mainWebView.webViewClient = CustomWebViewClient(...) // This custom class doesn't do anything other than check if the user leaves the YT website.
mainWebView.webChromeClient = WebChromeClient()
mainWebView.settings.javaScriptEnabled = true
mainWebView.settings.domStorageEnabled = true
< /code>
Тогда я загружаю страницу: < /p>
mainWebView.loadUrl("https://www.youtube.com/watch?app=desktop&v=lh7WIW3pcso")
< /code>
Далее я выполняю немного Javascript на щелчке конкретной кнопки и отображаю результат. Я проверил код JavaScript в консоли моего браузера, и он работал нормально. (Это дало результат {"x": 0, "y": 56} 
.)

Код: Выделить всё

mainWebView.evaluateJavascript(
"(function() { var element = document.getElementById('full-bleed-container'); var rect = element.getBoundingClientRect(); return JSON.stringify({ x: rect.left, y: rect.top }); })();"
) { result ->

if (result == "null") {
Toast.makeText(this, "NULL!", Toast.LENGTH_SHORT).show()
} else {
val coordinates = JSONObject(result)
val x = coordinates.getDouble("x")
val y = coordinates.getDouble("y")
Toast.makeText(this, "Coordinates: X: $x, Y: $y", Toast.LENGTH_SHORT).show()
}
}
Тем не менее, мое приложение сбои с следующим исключением: org.json.jsonexception: value {"x": 0, "y": 56} типа java.lang.string не может быть преобразована в jsonobject .
Я также проверил, что на следующей код и код, и это было инитно, и я не был проверен, и я не был проверен, и я не был протестировал, и это было инитно, и я не проверил, и я не был проверен, и я не был проверен, и я не был проверен, и я не был проверен, и я не смотрел, и это было/код, и я был Готово): < /p>

Код: Выделить всё

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

Toast.makeText(context, "Loaded '$url'!", Toast.LENGTH_SHORT).show()
}
Во -первых, почему строка ответа JSON не преобразуется в jsonObject успешно, и во -вторых, приложение не должно давать такого же ответа json на разных размерах устройства, не так ли? Не уверен, что здесь происходит, но мне нужно получить координаты в таком формате, что я могу отобразить кнопку над этим элементом.


Подробнее здесь: https://stackoverflow.com/questions/795 ... dinates-on
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»