当前位置: 代码迷 >> Android >> Android 嵌入 html页面,页面的javascript代码不能执行解决方案
  详细解决方案

Android 嵌入 html页面,页面的javascript代码不能执行解决方案

热度:244   发布时间:2016-05-01 21:33:26.0
Android 嵌入 html页面,页面的javascript代码不能执行
我按网上的方法,在Android 嵌入了一个 html页面,html 里面的button可以调用 android 的方法,android里面的button也可以调用 html 里面的 javascript函数, 问题是: html里面的js函数却不能正常调用,朋友们帮我看下问题在哪儿,本人新手。

Activity:

Java code
            mWebView = (WebView) findViewById(R.id.webview);            WebSettings mWebSettings = mWebView.getSettings();            //加上这句话才能使用javascript方法            mWebSettings.setJavaScriptEnabled(true);                        //增加接口方法,让html页面调用            mWebView.addJavascriptInterface(new Object() {                    //这里可以正常调用                    public void startBaidu() {                        Uri uri = Uri.parse("http://www.baidu.com");                         Intent it  = new Intent(Intent.ACTION_VIEW,uri);                         startActivity(it);                     }            }, "demo");                        mWebView.loadUrl("file:///android_asset/login.html");                        //android 调用 html 的代码  //这里也可以正常调用            mButton = (Button) findViewById(R.id.button);            //给button添加事件响应,执行JavaScript的fillContent()方法            mButton.setOnClickListener(new Button.OnClickListener() {                    public void onClick(View v) {                            mWebView.loadUrl("javascript:fillContent()");                    }            });



login.html:
HTML code
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html>    <head>        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">        <title>login </title>    </head>    <script>                function login(){                    alert("登陆成功");                }                     </script>         <mce:script language="javascript"><!--                function fillContent(){                        document.getElementById("content").innerHTML = "你点击了  Android button.";                }                // --></mce:script>         <body>        <p><a onClick="window.demo.startBaidu()" href="">html startBaidu</a></p>                  <p><button onclick="login();">确定</button></p>    </body></html>


其他都正常,就是 上面的 “确定” 点击无效,无论把login()写在哪儿都不行,直接写成
<button onclick="alert(1);">确定</button> 也没有反应


另外还有个小疑问,如果页面都能用 html 嵌入实现,那还要android的框架做什么。




------解决方案--------------------
Html的方式太慢了,交互性太差

------解决方案--------------------
要对webView设置一下,webViewSetting里名字好像叫enableScripts方法
------解决方案--------------------
// webView.setWebChromeClient(new WebChromeClient()
// {
//
// @Override
// public boolean onJsAlert(WebView view, String url, String message,
// JsResult result)
// {
// System.out.println("url:" + url);
// return false;
// }
//
// });
------解决方案--------------------
哦onJsAlert要返回true就可以了。还要类似的 onJsPrompt看看文档就行 都差不多。还有诸如webClient类也可以控制浏览器的许多行为。
------解决方案--------------------
Java code
@Override            public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {                // return super.onJsAlert(view, url, message, result);                Builder builder = new Builder(mContext);                builder.setTitle(mContext.getText(R.string.dialog_tip_title));                builder.setMessage(message);                builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() {                    public void onClick(DialogInterface dialog, int which) {                        result.confirm();                    }                });                builder.setCancelable(false);                builder.create();                builder.show();                return true;            }
  相关解决方案