hun*_*ngr 45

首先,您的网址似乎不可用.

如果你想在Android应用程序和你的网络应用程序/网页之间进行数据交换,你可以通过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();
    }
}
Run Code Online (Sandbox Code Playgroud)

在你的WebView:

WebView webView = (WebView) findViewById(R.id.webview);
webView.addJavascriptInterface(new JavaScriptInterface(this), "Android");
Run Code Online (Sandbox Code Playgroud)

在您的网页中:

<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />

<script type="text/javascript">
    function showAndroidToast(toast) {
        Android.showToast(toast);
    }
</script>
Run Code Online (Sandbox Code Playgroud)

如果你想传递一些东西到你的网页,只需调用相应的javascript函数:

String str = "xxx";
myWebView.loadUrl("javascript:xxx('"+str+"')");
Run Code Online (Sandbox Code Playgroud)

以下是参考:http: //developer.android.com/guide/webapps/webview.html

  • 警告:如果已将targetSdkVersion设置为17或更高,则必须将@JavascriptInterface批注添加到您希望JavaScript可用的任何方法(该方法也必须是公共的).如果您未提供注释,则在Android 4.2或更高版本上运行时,您的网页无法访问该方法. (6认同)
  • 这个 myWebView.loadUrl("javascript:xxx('xxx')") 是什么意思;我也在使用 load url 来加载我的 html,所以可以多次使用 load url 吗? (2认同)
  • 是的,只要您的网页中存在 javascript 函数 (2认同)

Alv*_*ban 20

我想补充说,加载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 + "')");
    }           
});
Run Code Online (Sandbox Code Playgroud)

的test.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>
Run Code Online (Sandbox Code Playgroud)

取自Uncaught ReferenceError:myFunction未定义为null:1 webview中的Android异常


小智 5

只需启用 DOM Storage 并写入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);
    }
}
Run Code Online (Sandbox Code Playgroud)