そのため、今私のアプリでは、アクセスしているURLにリダイレクトがあり、これが発生すると、WebViewはアプリにとどまる代わりに新しいブラウザを開きます。ビューが通常のようにURLにリダイレクトされるように設定を変更する方法はありますが、新しいブラウザーを開くのではなく、アプリにとどまりますか?
編集:
リダイレクト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_?k=k%3D9780735622777&x=0&y= または、ブラウザでビューを開き、適切なものを表示します。ただし、すべてをアプリに保持したいです。
WebViewClientを作成し、 shouldOverrideUrlLoading メソッドをオーバーライドします。
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
}
});
公式の documentation によると、WebViewのリンクをクリックすると、URLを処理するアプリケーション(デフォルトではブラウザー)が起動します。このようなデフォルトの動作をオーバーライドする必要があります
myWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
});
デフォルトのカスタムWebViewClient
を追加するだけです。これにより、WebViewはロードされたURL自体を処理します。
mWebView.setWebViewClient(new WebViewClient());
URLをロードする前に、WebViewのカスタムWebviewClientオーバーライドshouldOverrideUrlLoadingメソッドを設定する必要があります。
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.
}
});
リダイレクトURLを処理するためのサンプルコードをチェックアウトし、ダウンロードせずにWebViewでPDFを開きます。 https://Gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf495
Webviewclientを実装するクラスを作成し、以下に示すようにURL文字列を取得できるようにする次のコードを追加します。これらを見ることができます例
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
}
})
詳細については、 こちら をクリックしてください