繁体   English   中英

在WebView Android中加载URL时出现问题

[英]Issue in loading URL in webview android

我需要在webview中显示一个登录网页链接,该链接如下所示

url = "https://test-dev.test.com/as/authorization.oauth2?client_id=com.test.td&response=code&value=id test mail&redirect_uri=com.test.ap://oauth2/test"; 

[用不同的名称修改了实际的URL]

在此页面上,我们必须输入用户名和密码。 单击登录将带您进入OTP屏幕,输入OTP结果后将出现url响应,因此我需要阅读代码。 使用此代码,我必须发出请求以获取会话的身份验证令牌。 对于令牌请求,响应将为Json。

现在,我需要帮助解决以下问题:

  1. 目前,它是在浏览器而不是Webview中打开的。 但是除上述链接外,其他链接也在应用程序的Webview中打开。
  2. 这是处理此事务响应的回调方法。

下面是我的代码:

private WebView webView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    webView = (WebView) findViewById(R.id.webView);
    webView.setWebViewClient(new MyWebViewClient());
    WebSettings settings = webView.getSettings();
    settings.setJavaScriptEnabled(true);
    webView.loadUrl(getAuthorizationURL());
    webView.setHorizontalScrollBarEnabled(false);
    webView.setWebContentsDebuggingEnabled(true);
    //  webView.addJavascriptInterface(new MyJavaScriptInterface(this), "HtmlViewer");    
}


    private String getAuthURL() {
    Uri.Builder builder = new Uri.Builder();
    builder.scheme("https")
            .authority("test-dev.test.com")
            .appendPath("ta/authorization.oauth2")
            .appendQueryParameter("client_id", "com.test.td")
            .appendQueryParameter("response", "code")
            .appendQueryParameter("value", "id test mail").appendQueryParameter("redirect_uri", "com.test.ap://oauth2/test")

    String url = Uri.decode(builder.build().toString());

    //url = "https://www.google.com/";
    // url = "https://developers.google.com/webmaster-tools/search-console-api/about";

    return url;
}


 private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView webView, String url) {

        System.out.println(" shouldOverrideUrlLoading :============ " + Uri.parse(url).getHost() + " url " + url);

        //            if(url.contains("dev.test.com")){
        //                webView.loadUrl(url);
        //                return false;
        //            }
        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(i);
        return true;
    }
}

听起来您正在执行OpenID身份验证。 您正在实现shouldOverrideUrlLoading()既触发最有可能进入默认Web浏览器的意图,并返回true 返回值告诉Android您是要控制加载页面( true )还是将其留在Web视图中( false )。 如果您不控制URL的处理,则Web视图将尝试像正常页面一样加载它。

您还将立即将网络视图定向到onCreate代码中的授权URL。 我认为这是您所看到的导航行为混乱的一部分。

对于这种身份验证过程,您不想覆盖加载OTP页面。 让Web视图像处理其他任何事情一样处理它。 您要做的是捕获URL响应。 您的shouldOverrideUrlLoading if语句应捕获响应URL,使用内容并响应true以使Web视图知道您已经使用了该URL。 其他所有内容都应通过网络视图处理。

最后,代码的注释版本在我看来就像是将您带入无限循环(编写方式)一样。 您要告诉Web视图加载授权URL,这将返回到您的Web客户端代码,这将捕获URL,从而导致其加载URL。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM