AlertDialog中的WebView加载网址前 [英] AlertDialog before loading url in webview

查看:189
本文介绍了AlertDialog中的WebView加载网址前的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这似乎是一个容易的事。我只是不能换我的头周围。
我刚开始对应用程序开发和Java

This seems like an easy thing to do. I just can't wrap my head around it. I've just started on app development and java

我试图创造一个确认框转到这个网址?是/否 - 当一个URL被加载网页视图

I'm trying to create a confirm box "Go to this url?" Yes/No - when an url is loaded in a webview.

我走到这一步:

private WebView mWebView;
public ProgressDialog pd;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mWebView = (WebView) findViewById(R.id.activity_main_webView);

    // Show loading
    pd = new ProgressDialog(this);
    pd.setMessage("Please wait Loading...");
    pd.show();

    // Enable Javascript
    WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    mWebView.setWebViewClient(new MyWebViewClient());
    mWebView.loadUrl(getString(R.string.Url));
}

和MyWebViewClient - 我需要停止的负载,并等待用户交互:

And MyWebViewClient - I need to stop the load and wait for the user to interact:

@Override
public boolean shouldOverrideUrlLoading(final WebView view, String url) {
    Context appContext = view.getContext().getApplicationContext();

    AlertDialog.Builder alertDialog = new AlertDialog.Builder(appContext);
    alertDialog.setTitle("Go to this url?");
    alertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener()
    {
        public void onClick(DialogInterface dialog,int which)
        {
            // Run the code below on yes - how to I get my parameters in here?
        }
    });

    alertDialog.setNeutralButton("No", new DialogInterface.OnClickListener()
    {
        public void onClick(DialogInterface dialog, int which)
        {
            // Cancel the request, but how?
        }
    });

    // Run this code on Yes
    if(Uri.parse(url).getHost().startsWith(String.valueOf(R.string.Url))) {
        return false;
    }
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
    view.getContext().startActivity(intent);
    return true;
}

侧的问题(仍然相关) - 有没有prettier的方式来访问其他类参数:

Side question (still related) - is there a prettier way to access parameters in other classes:

@Override
public void onPageFinished(WebView view, String url) {
    // This is far from pretty, but I need to get Progress Dialog
    MainActivity host = (MainActivity) view.getContext();

    if (host.pd.isShowing()) {
        host.pd.dismiss();
    }
}

在此先感谢!

推荐答案

我不知道,但尝试这个办法:

I am not sure but try this way:

@Override
public boolean shouldOverrideUrlLoading(final WebView view, String url) {
boolean flag=true; 

Context appContext = view.getContext().getApplicationContext();
AlertDialog.Builder alertDialog = new AlertDialog.Builder(appContext);
alertDialog.setTitle("Go to this url?");
alertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener()
{
    public void onClick(DialogInterface dialog,int which)
   {

    if(Uri.parse(url).getHost().startsWith(String.valueOf(R.string.Url))) {
    flag=false;

     }else{
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
       startActivity(intent);
       flag=true;
      }

    }
});

alertDialog.setNeutralButton("No", new DialogInterface.OnClickListener()
{
    public void onClick(DialogInterface dialog, int which)
    {
         view.stopLoading();
    }
});

 return flag;
}

和给我的这些反馈

更新:无JS

设置的WebView

WebView webView;
String webViewUrl = "http://www.google.com";
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setScrollbarFadingEnabled(false);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setPluginState(PluginState.ON);
webView.getSettings().setSupportZoom(true);
webView.loadUrl(webViewUrl);

然后实现 WebViewClient 这样的:

boolean flag=true; 
webView.setWebViewClient(new WebViewClient() {
        ProgressDialog progressDialog;

        public boolean shouldOverrideUrlLoading(final WebView view,final String url) {        

        if (!url.contains("google")) {

                // Could be cleverer and use a regex
                // Open links in new browser
                //view.getContext().startActivity(
                    //  new Intent(Intent.ACTION_VIEW, Uri.parse(url)));

                // Here we can open new activity

                flag=false;

            } else {

                // Stay within this webview and load url
                view.loadUrl(url);
                System.out.println("url: "+url);
                showAlert(url);
                flag=true;
            }

            return flag;

        }

        // Show loader on url load
        public void onLoadResource(WebView view, String url) {

            // if url contains string androidexample
            // Then show progress Dialog
            if (progressDialog == null && url.contains("google")) {

                // in standard case YourActivity.this
                progressDialog = new ProgressDialog(WebView2.this);
                progressDialog.setMessage("Loading...");
                progressDialog.show();
            }
        }

        // Called when all page resources loaded
        public void onPageFinished(WebView view, String url) {

            try {
                // Close progressDialog
                if (progressDialog.isShowing()) {
                    progressDialog.dismiss();
                    progressDialog = null;
                }
            } catch (Exception exception) {
                exception.printStackTrace();
            }
        }

    });

现在,创建 showAlert(字符串URL)方法如下:

public void showAlert(final String url) {
    AlertDialog.Builder builder = new AlertDialog.Builder(WebView2.this);
    builder.setIcon(android.R.drawable.ic_dialog_alert);
    builder.setTitle("Go to this url?");
    builder.setPositiveButton("Yes",
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int id) {
                    if(!url.contains("google")) {
                          //flag=false;
                       }else{
                          Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                          startActivity(intent);
                          //flag=true;
                        }
                }
            });
    builder.setNeutralButton("No", new DialogInterface.OnClickListener()
    {
        public void onClick(DialogInterface dialog, int which)
        {
             webView.stopLoading();
        }
    });
    AlertDialog alert = builder.create();

    alert.show();

}

这篇关于AlertDialog中的WebView加载网址前的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆