簡體   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