我正在尝试在我的Android网页视图中填写一些字段。但是我一直有这个错误01-28 05:06:22.980: E/Web Console(2827): Uncaught TypeError: Cannot set property 'value' of null at null:1
我搜索过但没找到解决办法。我该如何解决这个问题? 这是我的代码
public void onStart() {
super.onStart();
webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
String url = "file:///android_asset/index.html";
webView.loadUrl(url);
webView.setWebViewClient(new WebViewClient(){
public void onPageFinished(WebView view, String url) {
webView.loadUrl("javascript: {"
+ "document.getElementById('AddSerialNum').value = '"
+ ABC
+ "';"
+ "document.getElementById('ctl00_PageContent_lblName').value = '"
+ ABC + "';};");
}
});
}
这是我的index.html文件
<!DOCTYPE html>
<html>
<body>
<div style="BORDER-BOTTOM: #dfdfdf 3px solid; PADDING-BOTTOM: 1px; MARGIN-BOTTOM: 10px; HEIGHT: 25px;">
......
<div style="padding: 10px;">
<table width="100%">
<tbody><tr>
<td>
<div style="float: left;">
<div>
<form>Serial Number: <input type="text" name="AddSerialNum"></form><br><br>
<span id="ctl00_PageContent_lblName" style="font-weight:bold;"></span>
</div>......
有没有办法填充字段并稍后用java获取数据?
提前致谢。
答案 0 :(得分:3)
使用getElementById
,您将获得id
的DOM元素。标识AddSerialNum
不存在,这是错误告诉您的内容。
你有一个input
name="AddSerialNum"
,我想你想得到它。要么为其添加id
,要么使用getElementsByName("AddSerialNum")[0]
修改强>: 就像我已经指出的那样,你必须使用它:
webView.loadUrl("javascript: {document.getElementsByName(\"AddSerialNum\")[0].value ='" + ABC + "';};");
getElementsByName
会返回一个元素数组,您必须使用[0]
答案 1 :(得分:2)
只是添加一些代码作为样本。
mWebView.setWebViewClient(new WebViewClient() {
private void setUserEmail(WebView view) {
String js = "javascript: {document.getElementsByName(\"recover-email\")[0].value ='" + mEmail + "';};";
if (Build.VERSION.SDK_INT >= 19) {
view.evaluateJavascript(js, s -> {
});
} else {
view.loadUrl(js);
}
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
mLoadingProgressBar.setVisibility(View.GONE);
setUserEmail(view);
}
}