25

我在我的 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类变量的文本框,然后自动点击提交。

但我不知道如何做到这一点。

任何想法将不胜感激。

4

5 回答 5

55

首先,您的 URL 似乎不可用。

如果您想在 android 应用程序和您的 Web 应用程序/网页之间进行数据交换,您可以通过 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

于 2012-08-01T03:48:12.157 回答
26

我要补充一点,应该在加载 html 时完成 javascript 函数的加载。要控制它,您可以使用以下命令:

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 + "')");
    }           
});

测试.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 is not defined at null:1 Android exception in webview

于 2014-06-24T15:01:14.847 回答
6

只需启用 DOM 存储并写入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);
    }
}
于 2018-01-19T21:09:27.520 回答
4

小心调用这样的javascript函数,str可能包含单引号或其他特殊字符。

String str = "xxx";
myWebView.loadUrl("javascript:xxx('"+str+"')");

我建议str在base64中编码,并在javascript端解码。

  • 安卓

    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)
    }
    
于 2018-07-03T05:33:15.683 回答
1

直接在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");
于 2018-09-12T08:14:50.980 回答