如何防止Android Webview中特定URL的GOBACK按钮?

时间:2015-01-02 06:53:24

标签: java android webview

我有一个可以在我的Android WebView上运行的Web应用程序,但没有问题。

这是我的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 按钮,以便在我成功登录后返回到默认的起始页面(登录页面)?

注意:我仍然会将 GO BACK 按钮用于其他网络应用程序,或者如果我再次退出。

3 个答案:

答案 0 :(得分:2)

在这里我是如何解决的,我添加了if equals语句来比较登录过程后页面的URL与WebView URL,如果它们相同则不允许GO BACK并显示消息“You登录“,这样我就防止了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);
}

答案 1 :(得分:1)

感谢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);
}

答案 2 :(得分:0)

您希望禁用后退按钮的活动 - 请执行此操作

@Override
public void onBackPressed(){
    return;
}

您必须将其添加为全局函数。

在你的情况下,你希望你的后退按钮在某些情况下工作,而不是在某些情况下工作 -

您可以在onBackPressed()

中执行此操作
if(BackButton_Dont_Work_Condition)
  return

else 
  super.onBackPressed()