美文网首页
Android WebView提交form表单 简单写一个dem

Android WebView提交form表单 简单写一个dem

作者: lang_un | 来源:发表于2018-12-06 17:12 被阅读425次

附上Demo地址:https://github.com/langsun/WebViewSubmitFormDemo

1.先看java代码,getData()返回的就是一个PersonBean的json字符串,这个就是要提交表单的数据,字段和后面form.html中字段相对应,其实最主要的就是onPageFinished方法中的view.loadUrl("javascript:submit(" + data + ")");,这个就是调用js,提交form表单
package com.sun.webviewsubmitform;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import com.google.gson.Gson;

public class MainActivity extends AppCompatActivity {
    private WebView mWebView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mWebView = findViewById(R.id.web_view);

        setWebView(getData());
    }

    private String getData() {
        PersonBean bean = new PersonBean();
        bean.UserName = "张三";
        bean.UserId = "1001";
        bean.Token = "SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc";
        bean.Age = 18;
        bean.ActionUrl = "http://www.baidu.com";
        Gson gson = new Gson();
        return gson.toJson(bean);
    }

    private void setWebView(final String data) {
        WebSettings webSettings = mWebView.getSettings();
        webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //设置缓存
        webSettings.setUseWideViewPort(true);//适应分辨率
        webSettings.setJavaScriptEnabled(true);//设置能够解析Javascript
        webSettings.setLoadWithOverviewMode(true);
        webSettings.setDomStorageEnabled(true);
        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
        mWebView.setHapticFeedbackEnabled(false);

        mWebView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                if (!TextUtils.isEmpty(data))
                    view.loadUrl("javascript:submit(" + data + ")");
                super.onPageFinished(view, url);
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return super.shouldOverrideUrlLoading(view, url);
            }

            @Override
            public void onReceivedError(WebView view, WebResourceRequest request,                   WebResourceError error) {

            }
        });

        if (!TextUtils.isEmpty(data)) {
            mWebView.loadUrl("file:///android_asset/web/form.html");
        }
    }
}
2.再看form.html代码,其中js中的submit(data)就是你在java中所调用的方法,然后调用setData(data)将数据填充的form表单,通过post提交,其中actionUrl就是你要跳转的页面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>跳转中....</title>
    <script language="javascript">
        function submit(data) {
        setData(data);
        document.getElementById('actionUrl').submit();
        }
    
        function setData(data){
            document.getElementById('userName').value =data.UserName;
            document.getElementById('userId').value =data.UserId;
            document.getElementById('token').value =data.Token;
            document.getElementById('age').value =data.Age;
            document.getElementById('actionUrl').action =data.ActionUrl;
        }
    </script>
</head>
<body>
<form action="" method="post" id="actionUrl">
    <input type="hidden" name="userName" id="userName" value=""/>
    <input type="hidden" name="userId" id="userId" value=""/>
    <input type="hidden" name="token" id="token" value=""/>
    <input type="hidden" name="age" id="age" value="">
</form>
</body>
</html>
3.其实提交form表单就这么简单,OVER

相关文章

网友评论

      本文标题:Android WebView提交form表单 简单写一个dem

      本文链接:https://www.haomeiwen.com/subject/sxwocqtx.html