javascript - 使用 Android 中的 WebView 自动填写表单

标签 javascript java android android-webview

我正在使用 WebView 尝试使用我发送的数据填写表单。

WebView webView;
String url = "http://139.59.34.30/quotation/";
String btn_ci, btn_co, n, a, k, r, m;
Intent in;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_web);
    webView = (WebView) findViewById(R.id.webview);
    in = getIntent();
    btn_ci = in.getStringExtra("checkin");
    btn_co = in.getStringExtra("checkout");
    n = in.getStringExtra("name");
    a = in.getStringExtra("adults");
    k = in.getStringExtra("kids");
    r = in.getStringExtra("rooms");
    m = in.getStringExtra("mail");
    webView.getSettings().setJavaScriptEnabled(true);
    webView.setWebViewClient(new WebViewClient() {
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            view.loadUrl("javascript:document.getElementsByName('name').value = '"+n+
                    "';document.getElementsByName('checkin').value='"+ btn_ci +
                    "';document.getElementsByName('checkout').value='"+ btn_co +
                    "';document.getElementsByName('no_of_pax').value='"+ a +
                    "';document.getElementsByName('no_of_kid').value='"+ k +
                    "';document.getElementsByName('no_of_rooms').value='"+ r +"';");
        }
    });
    webView.loadUrl(url);

但是每次 Activity 执行时,页面都会加载一段时间,并且没有填充任何值,然后它只显示我传递的最后一个字符串。

最佳答案

您可以使用以下代码代替 onPageFinished 中的代码,它将适用于所有 Android API 版本,

        final String js = "javascript: " +
                "var nameDoc = document.getElementsByName('name');" +
                "nameDoc[0].value = '"+n+ "';" +
                "var checkOutDoc = document.getElementsByName('checkout');" +
                "checkOutDoc[0].value = '"+btn_co+ "';" +
                "var noOFPaxDoc = document.getElementsByName('no_of_pax');" +
                "noOFPaxDoc[0].value = '"+a+ "';" + // a should be int based on ur HTML
                "var noOFKidDoc = document.getElementsByName('no_of_kid');" +
                "noOFKidDoc[0].value = '"+k+ "';" + // a should be int based on ur HTML
                "var noOFRoomsDoc = document.getElementsByName('no_of_rooms');" +
                "noOFRoomsDoc[0].value = '"+r+ "';" + // a should be int based on ur HTML
                "var checkInDoc = document.getElementsByName('checkin');" +
                "checkInDoc[0].value = '"+btn_ci+ "';";

        if (Build.VERSION.SDK_INT >= 19) {
            view.evaluateJavascript(js, new ValueCallback<String>() {
                @Override
                public void onReceiveValue(String s) {

                }
            });
        } else {
            view.loadUrl(js);
        }

关于javascript - 使用 Android 中的 WebView 自动填写表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44383177/

相关文章:

javascript - Firefox WebExtension - 如何获取和修改跨域iframe的内容

java - 为什么 Java 在嵌套类中允许 "public static final"用于简单类型而不是数组?

java - Achartengine getRange 方法问题

java - 如何使用 android java 将发布数据传递给我的 php 代码?

javascript - 如何使用键盘事件对无序列表中的列表元素重新排序?

javascript - 在Safari或iOS上不会触发onended()

javascript - 如何在 Googlemaps api v3 中添加 Spiderfier?

java - 如何计算给定点(经度,纬度)给定半径内的所有点(经度,纬度)?

android - 检查图像是否为黑色

android - 如何在 Activity 中循环一组 View ?