在这种情况下,如何将数据从Javascript传递到Android WebView?

问题描述

|
@Override
protected void onCreate(Bundle savedInstanceState) {
    // Todo Auto-generated method stub
    super.onCreate(savedInstanceState);
    Main();

}
public void Main()
{
    _linearLayout = new LinearLayout(this);
    _webview = new WebView(this);
    _linearLayout.addView(_webview,LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);
    setContentView(_linearLayout);

    _webview.getSettings().setJavaScriptEnabled(true);
    _webview.getSettings().setPluginsEnabled(true);
    _webview.getSettings().setAllowFileAccess(true);

    _webview.setWebChromeClient(new WebChromeClient());
    _webview.addJavascriptInterface(this,\"Question\");
    _webview.loadData(GetHTML(),\"text/html\",\"utf-8\");


}

public String GetHTML()
{   
    String HTML = \"\"
        + \"<HTML>\"
        + \"<HEAD>\"
        + \"<TITLE>Radio Button onClick Handler</TITLE>\"
        + \"<SCRIPT LANGUAGE=\\\"JavaScript\\\">\"
        +\"function function1(colors) {\" 
        +\"var col = (colors.options[colors.selectedindex].value);\"
        +\" if (col) {\"
        +\"  document.bgColor = col;\"

        +\"   } \"
        +\"</script>\"
        + \"</HEAD>\"
        + \"<BODY>\"
        +\"<form>\"
        +\"<b> Hello </b>\"
        //+\"<select name=\\\"colors\\\" onChange=\\\"window.Question.function1(this);\\\">\"
        +\"<select name=\\\"colors\\\" onChange=\\\"window.Question.OnjsClick_SelectedItem(\' string value\');\\\">\"
           +\"<option value=\\\"white\\\" selected>White</option>\"
           + \"<option value=\\\"cyan\\\">Cyan</option>\"
           + \"<option value=\\\"ivory\\\">Ivory</option>\"
           + \"<option id=\\\"myO\\\" value=\\\"blue\\\">Blue</option>\"

        +\"</select>\"
        +\"</form>\"
        + \"</BODY>\"
        + \"</HTML>\";

    return HTML;
}

public void OnjsClick_SelectedItem(final String str)
{
    mHandler.post(new Runnable()
    {
        //@Override
        public void run()
        {
            getValue(str);
        }
    });
}

public String getValue(String str)
{
    _webview.loadUrl(\"javascript:function1(colors)\");
    Toast.makeText(this,\"Under getValue \" + str,Toast.LENGTH_SHORT).show();
    return str;

}
}
请帮帮我。     

解决方法

        您应该使用这样的东西:
<select name=\"colors\"
    onChange=\"Question.OnJsClick_SelectedItem(this.options[this.selectedIndex].text)\">
    ,        您可以将代码作为HTML页面存储在Assets文件夹中,并使用URL的load URL方法显示该页面。
mWebView.loadUrl(\"file:///android_asset/index.html\");
根据评论进行编辑 启用JavaScript
 WebView webView = (WebView) findViewById(R.id.webview);
    WebSettings webSettings = myWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webView.addJavascriptInterface(new JavaScriptInterface(this),\"Android\");
这是一些HTML和JavaScript,当用户单击按钮时,它们会使用新界面使用Toast消息创建Toast消息
<input type=\"button\" value=\"Say hello\" onClick=\"showAndroidToast(\'Hello Android!\')\" />

<script type=\"text/javascript\">
    function showAndroidToast(toast) {
        Android.showToast(toast);
    }
</script>
在您的Java代码中添加
public class JavaScriptInterface {
    Context mContext;

    /** Instantiate the interface and set the context */
    JavaScriptInterface(Context c) {
        mContext = c;
    }

    /** Show a toast from the web page */
    public void showToast(String toast) {
        Toast.makeText(mContext,toast,Toast.LENGTH_SHORT).show();
    }
}
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...