Android 嵌入 html页面,页面的javascript代码不能执行
我按网上的方法,在Android 嵌入了一个 html页面,html 里面的button可以调用 android 的方法,android里面的button也可以调用 html 里面的 javascript函数, 问题是: html里面的js函数却不能正常调用,朋友们帮我看下问题在哪儿,本人新手。
Activity:
Java codemWebView = (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
loginfunction login(){
alert("登陆成功");
}
确定
其他都正常,就是 上面的 “确定” 点击无效,无论把login()写在哪儿都不行,直接写成
确定 也没有反应
另外还有个小疑问,如果页面都能用 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;
}