要用javascripte 的做吧,不过是别人的网页,可以解析xml吗
解决方案 »
- 百思不得其解的一个简单的读文件流为字符串的小问题
- android 如何在view里关闭activity
- 麻烦大家帮我一下这个界面怎样设计
- 求助关于Android平台上开发弹性社交网络涉及的相关技术
- 如何控制Tabhost的单个tag里面的布局?
- 如何获取应用程序的入口ACTIVITY类
- 请问有谁参加谷歌的开发者大会?
- service问题
- android studio DDMS debug process 无法激活,小虫子灰色
- ADT for exlipse plugins 将要过时了?
- 安卓 mtk或者展讯芯片手机 如何通过修改驱动程序 使电脑端检测到的数据发生变化
- 低版本兼容使用Fragment
import java.util.Map;
import java.util.Map.Entry;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;/**
* 内嵌浏览器的util
* @author TCK-001
* @version 1.0
*/
public final class BrowserUtil {
private BrowserUtil() {}
private static BrowserUtil bean = new BrowserUtil();
private WebView webView;
private String showSourceMethod;
private Map<String, Object> urlGressMsg;
private ProgressDialog gressDialog;
/**
* 单例模式获得bean
* @param webView 浏览器对象
* @param showSourceMethod 显示源码的方法,可以为null
* @param urlGressMsg 加载网页显示进度条的内容
* @return
*/
public static BrowserUtil get(WebView webView, String showSourceMethod, Map<String, Object> urlGressMsg) {
if (null == webView) {
throw new RuntimeException("加载浏览器出错");
}
bean.webView = webView;
bean.showSourceMethod = showSourceMethod;
bean.urlGressMsg = urlGressMsg;
return bean;
}
private WebViewClient client = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String targetUrl) {
view.loadUrl(targetUrl);
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
String msg = getGress(dispUrl(url));
if (!ToolUtil.get().isBlank(msg)) {
gressDialog = ProgressDialog.show(webView.getContext(), "请稍等...", msg, true);
gressDialog.setCanceledOnTouchOutside(true);
}
} @Override
public void onPageFinished(WebView view, String url) {
if (null != gressDialog) {
gressDialog.dismiss();
}
gressDialog = null;
if (!ToolUtil.get().isBlank(showSourceMethod)) {// 显示源码
view.loadUrl("javascript:window." + showSourceMethod + "('<head>'+" +
"document.getElementsByTagName('html')[0].innerHTML+'</head>');");
}
} };
private OnKeyListener keyListener = new OnKeyListener() {
public boolean onKey(View view, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
webView.goBack();
return true;
}
}
return false;
}
};
// 处理url,有问号就去掉
private String dispUrl(String url) {
return (!ToolUtil.get().isBlank(url) && url.indexOf("?") != -1 ? url.substring(0, url.indexOf("?")) : url);
}
// 根据url获得进度条提示语
private String getGress(String url) {
if (null == urlGressMsg) {return "";}
String msg = (String) urlGressMsg.get(dispUrl(url));
if (ToolUtil.get().isBlank(msg)) {
for (Entry<String, Object> entry : urlGressMsg.entrySet()) {
if (entry.getKey().indexOf(url) != -1 || url.indexOf(entry.getKey()) != -1) {
msg = (String) entry.getValue();
break;
}
}
}
return msg;
} public WebViewClient getClient() {
return client;
} public OnKeyListener getKeyListener() {
return keyListener;
}}// 初始化内嵌浏览器
private void initBrowser() {
int size = viewUtil.getChildHeight(800, 60);
((ImageView) findView(R.id.imgQQ)).setImageBitmap(imageUtil.reduce(resBitmap(R.drawable.qq), size, size, false));
((ImageView) findView(R.id.imgWB)).setImageBitmap(imageUtil.reduce(resBitmap(R.drawable.wb), size, size, false));
webview = findView(R.id.wbvBrowser);
Map<String, Object> gressMsg = toolUtil.createMap(new String[] { OtherUrls.QQ_LOGIN_URL, OtherUrls.SINA_LOGIN_URL, Config.TCK_URL + "/login/third.htm" },
new Object[] { "正在加载QQ界面...", "正在加载新浪微博界面...", "正在登录淘材库服务器..." });
BrowserUtil browser = BrowserUtil.get(webview, "otherLogin.showBrowserSource", gressMsg);
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebViewClient(browser.getClient());
webview.setOnKeyListener(browser.getKeyListener());
webview.addJavascriptInterface(this, "otherLogin");
}
public boolean onJsAlert(WebView view, String url, String message,
final JsResult result) {
return true;
} @Override
public boolean onJsConfirm(WebView view, String url,
String message, final JsResult result) {
return true;
} };
看到重写的两个方法了吗,来处理js弹出。webview控件想赋值给自己的java代码要在webview控件中启用js接口
myWebView.addJavascriptInterface(Object objct,
"别名");
那个object可以是你的一个类的对象,
别名就是在js中用别名.funcation调用你那个object类中的方法等
lz可以简单写一下,输出下日志调试下就明白了