webview加载页面,JS方法不能加载的问题解决
来源:互联网 发布:jquery 转js 编辑:程序博客网 时间:2024/06/11 10:41
今天发现在webview,没有办法加载JS方法,跳不出那种提示框,就是写了webview.getSettings().setJavaScriptEnabled(true); 这一句也完全没用。后来发现网上说的解决方案是用要用到WebChromeClient ,并且重写它里面的几个方法才行。
MyWebChromeClient.java
package com.example.webview_js;import android.app.AlertDialog;import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.content.DialogInterface.OnClickListener; import android.content.DialogInterface.OnKeyListener; import android.graphics.Bitmap; import android.os.Message; import android.util.Log; import android.view.KeyEvent; import android.webkit.JsPromptResult; import android.webkit.JsResult; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.widget.EditText; /** 17. * http://618119.com/archives/2010/12/20/199.html 18. */ //**************************************************************************** public class MyWebChromeClient extends WebChromeClient { @Override public void onCloseWindow(WebView window) { super.onCloseWindow(window); } @Override public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg) { return super.onCreateWindow(view, dialog, userGesture, resultMsg); } /** * 覆盖默认的window.alert展示界面,避免title里显示为“:来自file:////” */ public boolean onJsAlert(WebView view, String url, String message, JsResult result) { final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext()); builder.setTitle("对话框") .setMessage(message) .setPositiveButton("确定", null); // 不需要绑定按键事件 // 屏蔽keycode等于84之类的按键 builder.setOnKeyListener(new OnKeyListener() { public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) { Log.i("onJsAlert", "keyCode==" + keyCode + "event="+ event); return true; } }); // 禁止响应按back键的事件 builder.setCancelable(false); AlertDialog dialog = builder.create(); dialog.show(); result.confirm();// 因为没有绑定事件,需要强行confirm,否则页面会变黑显示不了内容。 return true; // return super.onJsAlert(view, url, message, result); } public boolean onJsBeforeUnload(WebView view, String url, String message, JsResult result) { return super.onJsBeforeUnload(view, url, message, result); } /** 67. * 覆盖默认的window.confirm展示界面,避免title里显示为“:来自file:////” 68. */ public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext()); builder.setTitle("对话框") .setMessage(message) .setPositiveButton("确定",new OnClickListener() { public void onClick(DialogInterface dialog,int which) { result.confirm(); } }) .setNeutralButton("取消", new OnClickListener() { public void onClick(DialogInterface dialog, int which) { result.cancel(); } }); builder.setOnCancelListener(new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { result.cancel(); } }); // 屏蔽keycode等于84之类的按键,避免按键后导致对话框消息而页面无法再弹出对话框的问题 builder.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) { Log.v("onJsConfirm", "keyCode==" + keyCode + "event="+ event); return true; } }); // 禁止响应按back键的事件 // builder.setCancelable(false); AlertDialog dialog = builder.create(); dialog.show(); return true; // return super.onJsConfirm(view, url, message, result); } /** 108. * 覆盖默认的window.prompt展示界面,避免title里显示为“:来自file:////” 109. * window.prompt('请输入您的域名地址', '618119.com'); 110. */ public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, final JsPromptResult result) { final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext()); builder.setTitle("对话框").setMessage(message); final EditText et = new EditText(view.getContext()); et.setSingleLine(); et.setText(defaultValue); builder.setView(et) .setPositiveButton("确定", new OnClickListener() { public void onClick(DialogInterface dialog, int which) { result.confirm(et.getText().toString()); } }) .setNeutralButton("取消", new OnClickListener() { public void onClick(DialogInterface dialog, int which) { result.cancel(); } }); // 屏蔽keycode等于84之类的按键,避免按键后导致对话框消息而页面无法再弹出对话框的问题 builder.setOnKeyListener(new OnKeyListener() { public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) { Log.v("onJsPrompt", "keyCode==" + keyCode + "event="+ event); return true; } }); // 禁止响应按back键的事件 // builder.setCancelable(false); AlertDialog dialog = builder.create(); dialog.show(); return true; // return super.onJsPrompt(view, url, message, defaultValue, // result); } @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); } @Override public void onReceivedIcon(WebView view, Bitmap icon) { super.onReceivedIcon(view, icon); } @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); } @Override public void onRequestFocus(WebView view) { super.onRequestFocus(view); } }
在加载URL前写上这两行,应用上去
MyWebChromeClient myWebChromeClient = new MyWebChromeClient();webview.setWebChromeClient(myWebChromeClient);
这样就可以了。文章借见:http://www.imooo.com/web/web/962004.htm
MyWebChromeClient.java 适用性蛮大的,我没改就OK了
代码下载:http://download.csdn.net/detail/chexitianxia/9032525
0 0
- webview加载页面,JS方法不能加载的问题解决
- 页面加载前加载js的方法
- js 页面加载的方法
- Android WebView加载出现空白页面问题解决
- webView加载Html5按钮,JS不能调用问题的解决
- 加载(WebView)页面,调JS刷新数据
- Android中使用WebView加载H5页面的方法
- android webView 不能加载
- light7ui 刷新子页面 js不能加载的问题
- webView加载数据的方法
- js页面加载完毕方法
- 关于webview加载网页,返回后总是刷新页面问题解决
- webview 加载H5页面音乐不会自动播放问题解决方案
- webview简单加载页面
- WebView加载页面示例
- webview加载页面--
- WebView加载页面
- webView加载页面
- Http session cookie
- Note For Linux By Jes(3)-Linux文件与目录管理
- hdu5407
- android中判断是否为空遇到的问题
- c++ 中文分词介绍
- webview加载页面,JS方法不能加载的问题解决
- LeetCode题解:Valid Sudoku
- hdu 5299 树上博弈
- Android组件之间的通信方式
- U-boot-2014.04移植到MINI2440(1) 初步探索移植
- iOS 制作圆形头像
- myEclipse搭建SSH(Struts2+Spring3+Hibernate3)框架项目教程
- 二叉查找各类情况总结
- 程序员的生活充满压力,但你不能放弃!