在用户成功登录(WebView)后关闭活动
Close activity after successful user login (WebView)
我正在制作一个Android移动应用程序,它使用第三方登录页面在WebView中加载身份验证。当用户输入username/pass并提交表单时,它将cookie保存在用户的设备上并将用户重定向到下一页。
我想在这里做的是防止重定向,在cookie保存到用户的设备后关闭登录活动,并向用户显示主要活动。
任何建议吗?谢谢。
谢谢你的快速回答。我找到了一个适合我的解决方案。
正如我在问题中解释的那样,在用户输入凭据并成功登录后,WebView将加载下一页。我所做的是捕获重定向并关闭该活动。像这样:
myWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.contains("https://www.someservice/nextpage")) {
Intent i = new Intent(LogInActivity.this,MainActivity.class);
startActivity(i);
finish();
}
return true;
}
}
我不确定这是否是最优雅的解决方案,但它很短,它适合我:)
为WebView使用一个单独的activity ..
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
if (url.contains("http://redirectingurl")
finish(); // close activity
else
view.loadUrl(url);
return true;
}
我没有试过,但我认为这将工作。选择依据 我现在不能发布所有的代码,但我会给你一个想法。
在onPageFinished(Webview view, STring url)
方法,你可以注入一个javascript文件,控制login
按钮在第三方网页,像这样:
@Override
public void onPageFinished(WebView view, String url) {
view.loadUrl("javascript:/injection.js content will be here/")
}
injection.js
document.getElementById("loginButton").addEventListener("click", function(){
//login process copy paste without redirection
loginMethod()
});
并添加一个JavaScriptInterface到webView:
mWebView.addJavascriptInterface(new JsInterfaceLogin(this.getContext()), "MY_APP");
JsInterfaceLogin:
public class JsInterfaceLogin {
private final Context context;
public JsInterfaceLogin(Context context) {
this.context = context;
}
@JavascriptInterface
public void ___loggedIn___(String toast) {
Toast.makeText(context, ""+toast, Toast.LENGTH_SHORT).show();
//When user logged in, you can detect it in here
}
}
在injection.js的loginMethod()
函数中,在登录过程后调用:
window.MY_APP.___loggedIn___("test")
用户成功登录后将关闭登录活动并启动新活动
It is working smooth ....我申请了。
package com.loginsql.afterloginmove;
import android.content.Intent;
import android.os.Bundle;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private WebView webViewLogin;
private TextView loginTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webViewLogin = findViewById(R.id.myWebView);
loginTextView = findViewById(R.id.logintext);
webViewLogin.setWebViewClient(new WebViewClient());
webViewLogin.setWebChromeClient(new WebChromeClient());
webViewLogin.getSettings().setJavaScriptEnabled(true);
webViewLogin.loadUrl("https://myweblogin.com/auth/index");
webViewLogin.setWebViewClient(new WebViewClient()
{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.contains(url)) {
Intent i = new Intent(MainActivity.this, DashboardActivityActivity.class);
startActivity(i);
finish();
}
return true;
}
});
}
}
相关文章:
- 使用Dnamics CRM 2011中的JavaScript读取子网格的所有记录,而不考虑活动页面
- 如何在webView,Android中从@JavascriptInterface方法调用Javascript
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 活动选项卡's源代码-获取变量s值
- 在Angular 2中布线期间保持零部件处于活动状态
- 在ajax成功后,cluetip不适用于首次点击活动元素
- window.onload没有'无法在Android WebView中工作
- 如何使bxslider仅在移动视图中处于活动状态
- JQuery中的活动搜索栏
- 悬停下拉菜单即使在鼠标移出后也保持活动状态
- 将js添加到wordpress中以突出显示css活动菜单
- 当活动处于后台时,Android WebView不一致
- 安卓webview活动,如何获取js返回值
- 从片段 WebView JavaScript 更新活动图像视图
- 使用 Javascript 从 WebView 调用活动的方法
- 如何从WebView内部登录到活动(通过Javascript)
- Javascript不能在WebView活动中工作
- 在用户成功登录(WebView)后关闭活动
- Android菜单/子菜单-菜单'Title"不需要执行任何活动…当前刷新webview
- 使用webview重新创建活动后,JavaScript不会运行