如何防止 Android Webview 中特定 URL 的 GOBACK 按钮?
How to prevent GOBACK button for specific URL in Android Webview?
我有一个 Web 应用程序可以在我的 Android WebView
上正常运行。
这是我的 Android 应用程序启动器代码:
public class MainActivity extends Activity {
WebView webView;
private String urlAddress = "http://www.YourDomainName.com/TheLoginPage";
private String loadingTxt = "Loading";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast loadingMsg = Toast.makeText(this,
loadingTxt, Toast.LENGTH_SHORT);
loadingMsg.show();
webView = (WebView) findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(urlAddress);
webView.setWebViewClient(new myWebViewClient());
webView.setInitialScale(1);
webView.getSettings().setUseWideViewPort(true);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
if (webView.canGoBack()) {
webView.goBack();
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
一切正常。
我的问题:WebView 中的默认起始页是 Web 应用程序登录页。成功登录过程后,我想阻止(内置)GO BACK 按钮返回默认起始页面(登录页面),因为我已成功登录?
注意:我仍然会使用返回按钮返回网络应用程序的其余部分,或者如果我再次注销。
您 activity 想要禁用后退按钮 - 执行此操作
@Override
public void onBackPressed(){
return;
}
您必须将其添加为全局函数。
对于您的情况,您希望后退按钮在某些情况下起作用,而在某些情况下不起作用-
您可以在 onBackPressed()
中执行此操作
if(BackButton_Dont_Work_Condition)
return
else
super.onBackPressed()
这里是我的解决方法,我添加了 if equals
语句来比较登录过程后页面的 URL 与 WebView URL,如果它们相同然后 GO BACK 被禁止并显示一条消息 "You are logged in",这样我就可以防止 GO BACK。这是代码,对我有用:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
String url = new String("http://www.YourDomainName.com/PageAfterSuccessfulLogin");
String webUrl = new String(webView.getUrl());
if (url.equals(webUrl)) {
Toast.makeText(this, "You are logged in",
Toast.LENGTH_SHORT).show();
} else {
if (webView.canGoBack()) {
Toast.makeText(this, "Back",
Toast.LENGTH_SHORT).show();
webView.goBack();
}
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
谢谢 maytham-maytham,它工作得很好。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
String url = new String("https://www.domain name.com/index.php?logged=login%20successfully");
String webUrl = new String(webView.getUrl());
if (url.equals(webUrl)) {
Toast.makeText(this, "You are logged in",
Toast.LENGTH_SHORT).show();
}
else {
url = new String("https://www.domain name.com/main.php");
webUrl = new String(webView.getUrl());
if (url.equals(webUrl)) {
Toast.makeText(this, "Access Denied",
Toast.LENGTH_SHORT).show();
}
else
if (webView.canGoBack()) {
Toast.makeText(this, "Back",
Toast.LENGTH_SHORT);
webView.goBack();
}
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
我有一个 Web 应用程序可以在我的 Android WebView
上正常运行。
这是我的 Android 应用程序启动器代码:
public class MainActivity extends Activity {
WebView webView;
private String urlAddress = "http://www.YourDomainName.com/TheLoginPage";
private String loadingTxt = "Loading";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast loadingMsg = Toast.makeText(this,
loadingTxt, Toast.LENGTH_SHORT);
loadingMsg.show();
webView = (WebView) findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(urlAddress);
webView.setWebViewClient(new myWebViewClient());
webView.setInitialScale(1);
webView.getSettings().setUseWideViewPort(true);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
if (webView.canGoBack()) {
webView.goBack();
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
一切正常。
我的问题:WebView 中的默认起始页是 Web 应用程序登录页。成功登录过程后,我想阻止(内置)GO BACK 按钮返回默认起始页面(登录页面),因为我已成功登录?
注意:我仍然会使用返回按钮返回网络应用程序的其余部分,或者如果我再次注销。
您 activity 想要禁用后退按钮 - 执行此操作
@Override
public void onBackPressed(){
return;
}
您必须将其添加为全局函数。
对于您的情况,您希望后退按钮在某些情况下起作用,而在某些情况下不起作用-
您可以在 onBackPressed()
if(BackButton_Dont_Work_Condition)
return
else
super.onBackPressed()
这里是我的解决方法,我添加了 if equals
语句来比较登录过程后页面的 URL 与 WebView URL,如果它们相同然后 GO BACK 被禁止并显示一条消息 "You are logged in",这样我就可以防止 GO BACK。这是代码,对我有用:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
String url = new String("http://www.YourDomainName.com/PageAfterSuccessfulLogin");
String webUrl = new String(webView.getUrl());
if (url.equals(webUrl)) {
Toast.makeText(this, "You are logged in",
Toast.LENGTH_SHORT).show();
} else {
if (webView.canGoBack()) {
Toast.makeText(this, "Back",
Toast.LENGTH_SHORT).show();
webView.goBack();
}
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
谢谢 maytham-maytham,它工作得很好。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
String url = new String("https://www.domain name.com/index.php?logged=login%20successfully");
String webUrl = new String(webView.getUrl());
if (url.equals(webUrl)) {
Toast.makeText(this, "You are logged in",
Toast.LENGTH_SHORT).show();
}
else {
url = new String("https://www.domain name.com/main.php");
webUrl = new String(webView.getUrl());
if (url.equals(webUrl)) {
Toast.makeText(this, "Access Denied",
Toast.LENGTH_SHORT).show();
}
else
if (webView.canGoBack()) {
Toast.makeText(this, "Back",
Toast.LENGTH_SHORT);
webView.goBack();
}
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}