Android中WebView点击事件的拦截跳转到原生的界面
2016-10-30 00:59
513 查看
我们可以知道,android中嵌入WebView可以快速实现app开发上线,这个时候H5 和webview之间的交互就变得十分重要了,到目前为止交互的形式遇到的有三种:
第一:拦截H5界面的控件,具体实现看我前面的一篇博客:
http://blog.csdn.net/qq_33923079/article/details/52869787;
第二:拦截H5界面的点击事件,我们都是知道H5界面的点击事件说白了就是请求一个新的url(到目前为止我是这样理解的),那么说白了就是去拦截一个url,这就是本篇博客所要讲述的;
第三:为WebView的每一次网络请求的url添加标示位(参数),这将在后面的博客中讲述。
下面我们来看一下如何去拦截H5界面的点击事件:
首先是需要设置Web视图:
下面我们来看看MyWebViewClient这个内部类:
这样就行了,下面送上福利哦:
第一:拦截H5界面的控件,具体实现看我前面的一篇博客:
http://blog.csdn.net/qq_33923079/article/details/52869787;
第二:拦截H5界面的点击事件,我们都是知道H5界面的点击事件说白了就是请求一个新的url(到目前为止我是这样理解的),那么说白了就是去拦截一个url,这就是本篇博客所要讲述的;
第三:为WebView的每一次网络请求的url添加标示位(参数),这将在后面的博客中讲述。
下面我们来看一下如何去拦截H5界面的点击事件:
首先是需要设置Web视图:
// 设置Web视图 webview.setWebViewClient(new MyWebViewClient());
下面我们来看看MyWebViewClient这个内部类:
// 监听 所有点击的链接,如果拦截到我们需要的,就跳转到相对应的页面。 private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //这里进行url拦截 if (url != null && url.contains(/m/phoneRegiste.do)) { Intent intent = new Intent(PublicWebView.this, RegisterByPhone.class); PublicWebView.this.startActivity(intent); finish(); return true; } return super.shouldOverrideUrlLoading(view, url); } @Override public void onPageFinished(WebView view, String url) { view.getSettings().setJavaScriptEnabled(true); super.onPageFinished(view, url); } }
这样就行了,下面送上福利哦:
public class PublicWebView extends Activity {
private WebView webview;
private ImageButton back;
private LinearLayout public_webview_top;
private boolean showTitle;
private ProgressBar progressBar;
@SuppressLint(JavascriptInterface)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.public_webview);
Intent intent = getIntent();
String url = intent.getStringExtra(url);
String title = intent.getStringExtra(title);
showTitle = intent.getBooleanExtra(show_title, true);
public_webview_top = (LinearLayout) findViewById(R.id.public_webview_top);
if (showTitle) {
public_webview_top.setVisibility(View.VISIBLE);
} else {
public_webview_top.setVisibility(View.GONE);
}
TextView titletv = (TextView) findViewById(R.id.public_webview_title);
titletv.setText(title);
progressBar = (ProgressBar) findViewById(R.id.public_webview_progressbar);
webview = (WebView) findViewById(R.id.public_webview_webview);
// 加载需要显示的网页
webview.addJavascriptInterface(new JavascriptInterface(PublicWebView.this), Phoenix_Android);
webview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
// 设置WebView属性,能够执行Javascript脚本
webview.getSettings().setJavaScriptEnabled(true);
// 加载需要显示的网页
webview.loadUrl(url);
// 设置Web视图 webview.setWebViewClient(new MyWebViewClient());
webview.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
progressBar.setVisibility(View.GONE);
} else{
progressBar.setVisibility(View.VISIBLE);
}
super.onProgressChanged(view, newProgress);
}
});
back = (ImageButton) findViewById(R.id.public_webview_back);
back.setOnClickListener(new BackListener(PublicWebView.this, null, 1));
}
@SuppressLint(NewApi)
public class JavascriptInterface {
@SuppressWarnings(unused)
private Context context;
public JavascriptInterface(Context context) {
this.context = context;
}
public void back(String module, int status, String place) {
reFreshBlance();
if (status == -1) { // 用户取消了
return;
} else if (status == 0) {
Toast.makeText(PublicWebView.this, 充值请求失败,请稍后重试..., Toast.LENGTH_SHORT).show();
return;
} else if (status == 1) {
// 充值请求成功
reFreshBlance();
// 1.用户中心进来的有两个参数
// a.bet参数是返回购彩界面
// b.userCenter返回用户中心
}
}
}
// 监听 所有点击的链接,如果拦截到我们需要的,就跳转到相对应的页面。
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
System.out.println(----------------------shouldOverrideUrlLoading 。。 url: + url);
if (url != null && url.contains(/m/phoneRegiste.do)) {
Intent intent = new Intent(PublicWebView.this, RegisterByPhone.class);
PublicWebView.this.startActivity(intent);
finish();
return true;
}
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
view.getSettings().setJavaScriptEnabled(true);
super.onPageFinished(view, url);
}
}
// 覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && webview.canGoBack()) {
// webview.goBack();// 返回前一个页面
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
相关文章推荐
- android——webview拦截跳转指定url后,点击返回界面重定向的问题
- Android 以webview的方式集成Dcloud 5+SDK 实现携带数据跳转原生界面
- android webview js交互, 响应webview中的图片点击事件
- 响应webview中的图片点击事件 (android webview js交互)
- Android使用WebView嵌入网页,网页内点击跳转到另一个网页后,返回问题解决
- Android实现图文混排(2) 通过webview实现 并实现点击 图片处理事件
- android webview js交互, 响应webview中的图片点击事件
- android webview js交互, 响应webview中的图片点击事件
- Android 响应webview中图片的点击事件
- Android内嵌网页webview点击其中的链接跳转到我们应用内的Activity
- Android内嵌网页webview点击其中的链接跳转到我们应用内的Activity
- android webview js交互, 响应webview中的图片点击事件
- android webview js交互, 响应webview中的图片点击事件
- android webview js交互, 响应webview中的图片点击事件
- android webview js交互, 响应webview中的图片点击事件
- android webview js交互, 响应webview中的图片点击事件
- android webview js交互, 响应webview中的图片点击事件 .
- android webview js交互, 响应webview中的图片点击事件
- android 通过webView,简单的通过网页唤起本地界面,如果比较多的话最好不要用原生的webView和js去搭建,用框架去做
- android webview js交互, 响应webview中的图片点击事件