最近有个项目需要用到第三方身份验证,进行用户登录,考虑到同时兼容多个第三方平台(如网易,新浪,腾讯等)的验证,而且要达到最大可能的跨平台(同时支持网页端和手机端),最终确定采取使用网页方式进行第三方的身份验证,以便于在线维护升级。
既然是在线系统,手机端就是访问该网点就是了。Android上提供了强大的WebView控件,利用这一工具,我们可以拦截各种由后台发起的页面跳转,也可以响应页面的JS脚本操作等等。以下是记录了一些,在项目过程中,遇到的问题的解决记录。
1、重定向URL的拦截:
我们首先了解一下类android.webkit.WebViewClient,WebViewClient是管理WebView加载URL指定页面的周期管理类,下面都是其加载的周期函数,通过继承并重载android.webkit.WebViewClient的两个方法shouldOverrideUrlLoading和onPageStarted,就可以实现拦截指定的重定向URL。
//begin load url at here
public void onPageStarted(WebView view, String url, Bitmap favicon) {
if (url.startsWith(BindURL)) {
Result result = parseTargetURL(url);
handleResult(result);
return;
}
}
//redirect when page loading, go here
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith(BindURL)) {
Result result = parseTargetURL(url);
handleResult(result);
return true;
}
return super.shouldOverrideUrlLoading(view, url);
}
// when load complete , go here
public void onPageFinished(WebView view, String url) {
handler.sendEmptyMessage(App.WebPageLoadOver);
}
//load page fail, go here
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
handler.sendEmptyMessage(App.WebPageLoadError);
super.onReceivedError(view, errorCode, description, failingUrl);
}
2、响应页面的JS弹窗
要在WebView上响应JS脚本,必须地要有以下的设置代码,
WebSettings setting = webview.getSettings();
setting.setJavaScriptCanOpenWindowsAutomatically(true);
setting.setJavaScriptEnabled(true);
然后得响应其弹窗请求,js代码:Alert.show("这是弹窗..."); 但是我们响应的弹窗十一什么的形式弹出来的?最方便的,当然就是用AlertDialog来装载js弹窗的内容了。ok,剩下要做的,就是拦截js的请求了。
这里我们有android.webkit.WebChromeClient,和WebViewClient管理加载URL不同,WebChromeClient是用来管理相关资源的,js也就是页面的资源之一了。
WebChromeClient也提供了相当丰富健全的回调API,可是在这里,我只有响应JS弹窗的需求,具体见下面的实例,下面一段时重载WebChromeClient的方法:
@Override //call when javascript request a popup window
public boolean onJsAlert(WebView view, String url, String message,
final JsResult result) {
new AlertDialog.Builder(ThirdPartyAuthActivity.this)
.setTitle("网页说:")
.setMessage(message)
.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
dialog.dismiss();
result.confirm();
//tell js, we handle it's request
}
}).create().show();
return true;
}
});
最后不要忘了把重载的WebChromeClient实例设置到view.setWebChromeClient(new WebChromeClient() {.........});
3、实现网页后退
习惯上网冲浪的人,对网页的后退肯定熟悉得不得了,可是在webview上怎么去实现呢?简单呗,之间按Back键就是了,结果一按,整个装载webview的Activity的退出去了,简单分析,就是返回的动作没有被webview监听到,反而通知到了Activity,那Activity当然也返回上一页了。OK,那思路就简单了,webview主动去监听Back键的动作:
webview.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_BACK &&
webview.canGoBack()) { //表示按返回键时的操作
webview.goBack(); //后退
return true; //已处理
}
}
return false;
}
});
分享到:
相关推荐
"webview学习demo"是一个专为iOS开发者设计的学习资源,它涵盖了如何在iOS应用中使用WebView以及如何实现iOS与JavaScript之间的双向通信。这个示例项目经过测试,可以免费直接运行,对于理解WebView的使用具有很高的...
在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中内嵌网页内容,实现与网页的交互。WebView基于Webkit渲染引擎,这使得它在性能和兼容性上与Safari和Chrome等浏览器保持一致。在本文中,我们...
在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中内嵌网页内容,实现与网页的交互。本文将深入探讨WebView的相关知识点,包括它的基本使用、设置、以及与JavaScript的交互。 首先,使用...
这个“webview学习常用demo”提供了一个基础的学习平台,帮助初学者理解并掌握WebView的用法。以下是对这个demo的详细解析: 1. **WebView基本使用** - `WebView` 类是Android SDK提供的一个组件,它能加载和显示...
### 超好的webview学习资料 #### 概述 本篇内容主要针对初学者介绍WebView的基本使用及其与JavaScript和Android平台之间的交互机制。通过详细解释WebView的基本配置、权限设置、事件监听、JavaScript支持等内容,...
### WEBVIEW学习资料详解 #### 一、简介与准备工作 在移动应用开发中,尤其是在Android平台上,`WebView`是一个非常重要的组件,它允许开发者在原生应用中展示和交互HTML内容。这对于集成网页功能或者利用现有Web...
WebView的学习是每个Android开发者必经之路,尤其是在需要混合开发或者嵌入H5页面时。下面我们将深入探讨WebView的基础知识、高级用法以及优化策略。 1. **基础使用** - **初始化WebView**: 在布局文件中添加...
WebView的学习对于Android开发者来说是必不可少的。以下是对WebView相关知识点的详细阐述: 1. **WebView基本使用**:WebView是Android SDK中的一个类,通过继承自ViewGroup,可以展示HTML、CSS和JavaScript等Web...
在Android开发中,WebView是一个非常重要的组件,它允许开发者在应用内部展示网页内容,无需跳转到外部浏览器。WebView基于WebKit渲染引擎,与Safari和Chrome相同,因此它能提供高质量的网页渲染效果。在本文中,...
【WebView2Loader.dll详解】 WebView2 是微软推出的一款现代Web技术框架,用于在桌面应用程序中嵌入Web内容。它基于Chromium项目,提供了与最新Web标准兼容的浏览器内核,使得开发者可以在桌面应用中轻松集成网页...
在移动应用开发中,Webview是一个关键组件,它允许开发者在原生应用程序内嵌入网页内容。Android系统自带的WebView是Android应用中常用的一种方式,但随着时间的推移,开发者们发现了一些限制,比如性能问题、版本...
这份源码提供了关于WebView的详细学习资料,非常适合Android开发者进行参考和学习。 首先,WebView是Android SDK中的一个视图类,继承自`android.webkit.WebView`。它的主要功能是加载和显示HTML、XML或其他Web内容...
这份“webview学习记录”文档,很可能是对Android WebView组件的深入探讨,包括其基本用法、常见问题及其解决方案的总结。 一、WebView的基本使用 1. 添加依赖:在AndroidManifest.xml文件中,我们需要添加WebView...
在本学习笔记中,我们将深入探讨WebView2的关键特性和应用场景,以及如何有效地在你的应用程序中集成和使用它。 1. **WebView2概述** - WebView2是Microsoft Edge Chromium的嵌入式版本,提供了一种在桌面应用中...
在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中加载和显示网页内容。有时候,我们可能希望去除WebView中的标题部分,以实现更自定义化的界面设计。本篇文章将详细探讨如何在Android的...
在Android开发中,Webview是一个非常重要的组件,它允许开发者在原生应用中嵌入网页内容,实现网页与原生应用的交互。本篇将详细讲解如何在Android Webview中实现滑动监听以及图片的放大缩小功能。 首先,我们要...
通过学习和实践这些知识点,开发者可以创建出一个功能完善的WebView应用,让用户在不离开应用的情况下浏览网页,提升用户体验。对于“8.webview加载网页”这个文件,可能是具体实现这些功能的代码示例,进一步深入...
在Android平台上,WebView是一个至关重要的组件,它允许开发者在应用程序中嵌入网页浏览功能,而无需启动完整的浏览器应用。在给定的标题“android webview 版本69.0”中,提到的是一个特定版本的WebView,即69.0。...
本篇文章将深入探讨如何使用WebView来构建一个简单的浏览器,并结合Android基础知识进行学习。 首先,我们需要理解WebView的基本概念。WebView是Android SDK中的一个类,它能够加载并显示网页内容,支持HTML、CSS和...