Я создаю приложение для Android, и у меня есть следующий javascript, который находится внутри "str8red.com", загруженного из webview:
<script>var name = "bob", age = 30;</script>
У меня есть текстовое поле, которое я могу установить с помощью:
textView.setText("Static Text")
Я хотел бы установить текстовое поле в переменную из javascript var name
. Я попытался использовать webview.loadUrl("javascript:Android.getIds(Ids);");
и evaluateJavascript
без успеха. Я также старался следовать многочисленным руководствам по переполнению стека и сети без успеха.
Ниже приведен код для загрузки webview:
wv = (WebView) findViewById(R.id.wv);
//Enable JavaScript
wv.getSettings().setJavaScriptEnabled(true);
wv.setFocusable(true);
wv.setFocusableInTouchMode(true);
//Set Render Priority To High
wv.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
wv.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
wv.getSettings().setDomStorageEnabled(true);
wv.getSettings().setDatabaseEnabled(true);
wv.getSettings().setAppCacheEnabled(true);
wv.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
//Load Url
wv.loadUrl("https://str8red.com/");
В порядке,
Таким образом, получается, что для чего-либо из KitKat вверх это просто:
wv.evaluateJavascript("fromAndroid()", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
textView.setText(value);
Мой пробел в понимании заключался в том, что я пытался получить доступ к javascript-переменным напрямую, но это не то, что делает оценка JavaScript. Похоже, что в этом примере на самом деле выполняется выбранная функция javascript, fromAndroid()
, и все, что возвращается, сохраняется в собственном приложении как переменная.
Ниже мой javascript код incase помогает:
<script>
function fromAndroid(){
return "{% if user.is_authenticated %}true{% else %}false{% endif %} 1 0";
}
</script>
Рад быть создан экспертом, но я надеюсь, что это может помочь кому-то в будущем.