Передача данных из класса Java в Web View html
Я загружаю ниже HTML в моем webView
https://mail-attachment.googleusercontent.com/attachment/?ui=2&ik=25c0c425c6&view=att&th=138db54ff27ad34b&attid=0.1&disp=inline&realattid=f_h5ahtmbe0&safe=1&zw&saduie=AG9B_P9YNooGjsk_jLefLptQ9q15&sadet=1343790299575&sads=-yBVsLKP_2mh7zMfYLCF7sL1u-w
Теперь я хочу заполнить текстовое поле в html
которое пришло из моей переменной класса java, и затем автоматически нажать на submit.
Но я понятия не имею, как это сделать.
Любые мысли будут оценены.
Ответы
Ответ 1
Во-первых, ваш URL-адрес кажется недоступным.
Если вы хотите выполнить обмен данными между приложением android и веб-страницей/веб-страницей, вы можете достичь этого с помощью javascript.
Вот пример официального сайта Android:
Создайте класс следующим образом:
public class JavaScriptInterface {
Context mContext;
/** Instantiate the interface and set the context */
JavaScriptInterface(Context c) {
mContext = c;
}
/** Show a toast from the web page */
@JavascriptInterface
public void showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
}
В вашем WebView
:
WebView webView = (WebView) findViewById(R.id.webview);
webView.addJavascriptInterface(new JavaScriptInterface(this), "Android");
На вашей веб-странице:
<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />
<script type="text/javascript">
function showAndroidToast(toast) {
Android.showToast(toast);
}
</script>
Если вы хотите передать что-то на свою веб-страницу, просто назовите соответствующую функцию javascript:
String str = "xxx";
myWebView.loadUrl("javascript:xxx('"+str+"')");
Вот ссылка:
http://developer.android.com/guide/webapps/webview.html
Ответ 2
Я бы добавил, что загрузка функции javascript должна выполняться при загрузке html. Для этого вы можете использовать следующее:
webview.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("file:///android_asset/test.html");
webview.setWebViewClient(new WebViewClient(){
public void onPageFinished(WebView view, String url){
webview.loadUrl("javascript:init('" + theArgumentYouWantToPass + "')");
}
});
test.html
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
hola
adios
</body>
<script type="text/javascript">
function init(val){
// Do whatever you want with your parameter val
}
</script>
</html>
Взято из Uncaught ReferenceError: myFunction не определен в null: 1 исключение Android в веб-браузере
Ответ 3
Будьте осторожны при вызове функции javascript, такой как str
может содержать одинарные кавычки или другие специальные символы
String str = "xxx";
myWebView.loadUrl("javascript:xxx('"+str+"')");
Я предлагаю кодировать str
в base64 и декодировать его на стороне javascript.
-
Android
String str = "xxx";
//encode in base64
String base64Str = Base64.encodeToString(str.getBytes(), Base64.NO_WRAP);
myWebView.loadUrl("javascript:xxx('"+ base64Str +"')");
-
Javascript
function xxx(val) {
//decode from base64
var str = atob(data)
}
Ответ 4
Просто включите DomStorage и напишите "var x =" в строку:
webview.getSettings().setJavaScriptEnabled(true);
web.getSettings().setDomStorageEnabled(true);
webview.loadUrl(urlString);
webview.setWebViewClient(new WebViewClient(){
public void onPageFinished(WebView view, String url){
super.onPageFinished(view, url);
String js = "javascript:var x =document.getElementById('username').value = '"+user+"';var y=document.getElementById('password').value='"+pass+"';";
if (Build.VERSION.SDK_INT >= 19) {
view.evaluateJavascript(js, new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
}
});
} else {
view.loadUrl(js);
}
view.loadUrl(js);
}
});
Ответ 5
Передайте параметр прямо в URL
webView.loadUrl("file:///android_asset/animation.html?message=testing");
Получить параметр в html
файл
var url_string = window.location.href
var url = new URL(url_string);
var message= url.searchParams.get("message");
Ответ 6
Я планирую использовать решение @AlvaroSantisteban, но мой код полностью реагирует на Typescript. Смогу ли я получить доступ к функции, которую я экспортирую в index.tsx, аналогично решению, приведенному здесь:
webview.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("file:///android_asset/test.html");
webview.setWebViewClient(new WebViewClient(){
public void onPageFinished(WebView view, String url){
webview.loadUrl("javascript:init('" + theArgumentYouWantToPass + "')");
}
});