我想让用户输入车辆编号,然后读取数据并向用户显示车辆详细信息。我不想在webview中这样做。我可以使用以下代码填充数据:
webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("https://parivahan.gov.in/rcdlstatus/vahan/rcstatus.xhtml");
webView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
String reg1="KA51X";
String reg2="2442";
if(isFirstLoad) {
webView.loadUrl("javascript: {" +
"document.getElementById('convVeh_Form:tf_reg_no1').value = '" + reg1 + "';" +
"document.getElementById('convVeh_Form:tf_reg_no2').value = '" + reg2 + "';" +
"var frms = document.getElementsByName('convVeh_Form');" +
"frms[0].submit(); };");
isFirstLoad = false;
}
}
});
以下是显示此应用数据的网站。
https://parivahan.gov.in/rcdlstatus/vahan/rcstatus.xhtml
现在我尝试使用此行点击提交按钮
"frms[0].submit(); };");
这个,
"javascript:(function(){document.getElementById('convVeh_Form:j_idt21').click();})()"
但他们没有工作。如何单击Id为
的按钮convVeh_Form:j_idt21
此外,一旦能够点击按钮,响应将来自网站。如何阅读该响应文本并将其放在app的textview中?
答案 0 :(得分:2)
您遇到了一个单独的问题,convVeh_Form:j_idt21
只是一个标签(在撰写本文时)。你想要convVeh_Form:j_idt27
。也许他们改变了?
您可能希望将注入的javascript和选择器设置为document.querySelector('[id="convVeh_Form:j_idt27"]').click()
。
为了css选择器的目的,这会使:
成为一个特殊字符。
webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("https://parivahan.gov.in/rcdlstatus/vahan/rcstatus.xhtml");
webView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
String reg1 = "KA51X";
String reg2 = "2442";
if (isFirstLoad) {
webView.loadUrl("javascript: {" +
"document.getElementById('convVeh_Form:tf_reg_no1').value = '" + reg1 + "';" +
"document.getElementById('convVeh_Form:tf_reg_no2').value = '" + reg2 + "';" +
"document.querySelector('[id=\"convVeh_Form:j_idt27\"]').click(); };");
isFirstLoad = false;
}
}
});
你也可以使用button[type="submit"]
作为选择器,如果你知道它总是第一个按钮,那么ID就不再重要了。 (也许他们会再次改变?)其他字段为document.querySelectorAll('input[type="text"]')[0]
和[1]
。
提交表单后,导航将会更改。这会触发您可以通过继承WebView来挂钩的事件。有关示例,请参阅this answer了解其他问题。
private class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// ...
}
}
将其用作事件,检测端点上的URL,然后注入一些新的javascript以从页面中提取信息。如果您需要更多帮助,请告诉我。
答案 1 :(得分:2)
我发现正确的ID是convVeh_Form:j_idt26
而不是
"的javascript:(函数(){的document.getElementById(' convVeh_Form:j_idt21')点击();})()"
请检查我的link以证明
因此,我的主要建议是在将其添加到Android之前在浏览器中测试您的JS代码。 Chrome中的调试模式对此非常有用,我相信您知道如何启用它。
之后如果您确定JS代码运行良好,请通过逻辑块将代码添加到Android。这可以帮助您调试它。
例如,首先将以下几行放在JS代码中:
document.getElementById(' convVeh_Form:tf_reg_no1')。value =' text' document.getElementById(' convVeh_Form:tf_reg_no2')。value =' text'
如果您在设备上看到了结果,则应添加点击事件。
的document.getElementById(' convVeh_Form:j_idt26&#39)。单击()
它可以分离你的JS逻辑,你将确定代码实际上有什么问题。
关于这一行:
此外,一旦能够点击按钮,响应将来自网站。如何阅读该响应文本并将其放在app的textview中?
您应该实现自己的WebViewClient()
并覆盖onPageFinished
并仅在正确的页面上运行JS代码。
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if("https://parivahan.gov.in/rcdlstatus/vahan/rcstatus.xhtml".equals(url)) {
// run JS
} else if("response_link".equals(url)) {
// notify user or any other logic
}
}
祝你好运!
P.S。上面的所有JS代码都适用于我这边的浏览器。
答案 2 :(得分:0)
如何点击Id为convVeh_Form的按钮:j_idt21
$('#convVeh_Form:j_idt21').click();
如何阅读该响应文本并将其放入app的textview中? 如果是提交表单,那么此消息将更容易使用ajax调用:
$.ajax({
url: "http://your.url",
})
.done(function( data ) {
$('#textview').text(data);
});