如何防止 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);
}