要用javascripte 的做吧,不过是别人的网页,可以解析xml吗

解决方案 »

  1.   


    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");
    }
      

  2.   

    webview是你自己写的吗,webview控件弹不出alert,需要用 WebChromeClient chromeClient = new WebChromeClient() { @Override
    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可以简单写一下,输出下日志调试下就明白了