Adnroid WebView使用,js交互与弹窗设置

在Android中,当WebView加载页面并点击按钮尝试弹出确认对话框时,有时对话框无法显示。解决这个问题的方法包括重载WebChromeClient的onJsConfirm方法,通过创建自定义对话框来处理确认操作;或者重写onCreateWindow方法,允许WebView打开新的窗口。记得启用JavaScript支持以确保正常交互。
摘要由CSDN通过智能技术生成
package com.zy.tour.usercenter;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.JavascriptInterface;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.LinearLayout;
import android.widget.Toast;

import com.zy.tour.BaseActivity;
import com.zy.tour.R;
import com.zy.tour.usercenter.personalcenter.PersonalCenterActivity;
import com.zy.tour.usercenter.utils.ContantsUtils;
import com.zy.tour.usercenter.utils.SaveData;
import com.zy.tour.util.app.LApplication;
import com.zy.tour.util.ui.TitleLayout;

@SuppressLint({ "SetJavaScriptEnabled", "JavascriptInterface" })
public class WapLoginActivity extends BaseActivity implements ContantsUtils,
		OnClickListener {
	private WebView webView;// 内容页
	private TitleLayout titleLayout;// 顶部栏
	private Activity mContext;
	private LinearLayout waitLayout;// 等待Layout

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_user_wap_login);
		mContext = this;
		titleLayout = (TitleLayout) findViewById(R.id.top);
		webView = (WebView) findViewById(R.id.webview123);
		waitLayout = (LinearLayout) findViewById(R.id.linearlayout_progressbar_wait);
		titleLayout.getTitleTextView().setText("用户");
		titleLayout.getRightImageView().setVisibility(View.VISIBLE);
		titleLayout.getRightImageView().setImageResource(R.drawable.refresh);
		titleLayout.getRightImageView().setOnClickListener(this);

		webView.getSettings().setJavaScriptEnabled(true);// 可以使用javaScriptEnalsed
		webView.getSettings().setCacheMode(2);// 不使用缓存
		webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
		webView.addJavascriptInterface(new JsObject(), "demo");
		webView.setWebViewClient(new WebViewClient() {
			@Override
			public boolean shouldOverrideUrlLoading(WebView view, String url) {
				if (url.startsWith("tel:")) {// 打电话
					Intent intent = new Intent(Intent.ACTION_CALL, Uri
							.parse(url));
					mContext.startActivity(intent);
				} else if (url.startsWith("sms:")) {// 发短息
					Uri uri = Uri.parse("smsto:" + url.split(":")[1]);
					Intent sendIntent = new Intent(Intent.ACTION_VIEW, uri);
					sendIntent.putExtra("sms_body", "");
					mContext.startActivity(sendIntent);
				} else {// 正常处理url
					view.loadUrl(url);
				}
				return true;
			}

			@Override
			public void onPageStarted(WebView view, String url, Bitmap favicon) {
				super.onPageStarted(view, url, favicon);
				waitLayout.setVisibility(View.VISIBLE);
			}

			@Override
			public void onPageFinished(WebView view, String url) {
				super.onPageFinished(view, url);
				waitLayout.setVisibility(View.GONE);
			}

			@Override
			public void onReceivedError(WebView view, int errorCode,
					String description, String failingUrl) {
				waitLayout.setVisibility(View.GONE);
				super.onReceivedError(view, errorCode, description, failingUrl);
				Toast.makeText(mContext, description + "\n" + failingUrl,
						Toast.LENGTH_LONG).show();
			}
		});
		webView.setWebChromeClient(new MyWebChromeClient());// 设置浏览器可弹窗
		webView.loadUrl("url");
	}

	/**
	 * 浏览器可弹窗
	 * 
	 * @author Administrator
	 * 
	 */
	final class MyWebChromeClient extends WebChromeClient {
		@Override
		public boolean onJsConfirm(WebView view, Str
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值