Android WebView、ブラウザを開く代わりにアプリでリダイレクトを処理する方法

StackOverflow https://stackoverflow.com/questions/4066438

  •  28-09-2019
  •  | 
  •  

質問

だから今、私のアプリでは、私がアクセスしているURLにリダイレクトがあり、これが起こると、WebViewはアプリにとどまるのではなく、新しいブラウザを開きます。設定を変更して、ビューが通常のようにURLにリダイレクトされますが、新しいブラウザを開く代わりにアプリにとどまる方法はありますか?

編集:

リダイレクトのURLが必要です。それを作成する方法がわからないので、そのURLにアクセスする唯一の方法は、必要なURLにリダイレクトを引き起こすことです。

例:ここに行くとき: http://www.amazon.com/gp/aw/s/ref=is_box_/k=9780735622777 URLを実際の製品にリダイレクトする方法に注意してください。私のアプリでは、新しいブラウザでそれを開くと、それは正常に行われますが、WebViewを使用してアプリに保持すると、k = 9780735622777を検索しているかのように表示されます。 http://www.amazon.com/gp/aw/s/ref=is_s_s_?k = k%3d978073562277 &x=0&y=0 。または、ブラウザでビューを開き、適切なものを表示します。しかし、私はすべてをアプリに入れたいと思っています。

役に立ちましたか?

解決

WebViewClientを作成し、オーバーライドします Refoverrideurlloading 方法。

webview.setWebViewClient(new WebViewClient() {
    public boolean shouldOverrideUrlLoading(WebView view, String url){
        // do your handling codes here, which url is the requested url
        // probably you need to open that url rather than redirect:
        view.loadUrl(url);
        return false; // then it is not handled by default action
   }
});

他のヒント

役人によると ドキュメンテーション, 、WebViewのリンクをクリックすると、URLを処理するアプリケーションが起動します。これはデフォルトでブラウザです。このようなデフォルトの動作をオーバーライドする必要があります

    myWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false;
        }
    });

デフォルトのカスタムを追加するだけです WebViewClient しましょう。これにより、WebViewはロードされたURL自体を処理できます。

mWebView.setWebViewClient(new WebViewClient());

カスタムWebViewClientをオーバーライドする必要があります Refoverrideurlloading URLをロードする前のWebViewの方法。

mWebView.setWebViewClient(new WebViewClient()
        {
            @SuppressWarnings("deprecation")
            @Override
            public boolean shouldOverrideUrlLoading(WebView webView, String url)
            {
                return shouldOverrideUrlLoading(url);
            }

            @TargetApi(Build.VERSION_CODES.N)
            @Override
            public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest request)
            {
                Uri uri = request.getUrl();
                return shouldOverrideUrlLoading(uri.toString());
            }

            private boolean shouldOverrideUrlLoading(final String url)
            {
                Log.i(TAG, "shouldOverrideUrlLoading() URL : " + url);

                // Here put your code

                return true; // Returning True means that application wants to leave the current WebView and handle the url itself, otherwise return false.
            }
        });

WebViewで、ダウンロードなしでURLをリダイレクトし、PDFを開くためのサンプルコードをチェックアウトします。 https://gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf49500

WebViewClientを実装するクラスを作成し、以下に示すようにURL文字列をovveridingできる次のコードを追加します。これらを見ることができます

public class myWebClient extends WebViewClient {

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
         view.loadUrl(url); 
         return true;
     }
}

コンストラクターで、以下に示すようにWebViewオブジェクトを作成します。

   web = new WebView(this); web.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); 

次に、次のコードを追加して、アプリ内のURLの読み込みを実行します

       WebSettings settings=web.getSettings(); 
    settings.setJavaScriptEnabled(true); 

    web.loadUrl("http://www.facebook.com");
    web.setWebViewClient(new myWebClient()); 

 web.setWebChromeClient(new WebChromeClient() {
      // 
      //
    }

デモをダウンロードします

以下のKotlinコードを使用してください

webview.setWebViewClient(object : WebViewClient() {
            override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {   
                view.loadUrl(url)
                return false 
            }
        })

詳細については、クリックしてください ここ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top