banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

Androidは、システムや外部のブラウザを呼び出さずにWebViewを強制的に使用します。

HTML5 ハイブリッドアプリでは、サードパーティのウェブサイト(例:百度)を H5 ページで開く必要がありますが、Android ではデフォルトで現在の WebView ではなく、システムや外部ブラウザを呼び出します。解決策は、WebViewClient を独自にオーバーライドし、shouldOverrideUrlLoading をオーバーライドして True を返すことです。

実装コード

mWebView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
// WebView が URL をロードし、システムが URL を処理する必要がないことを通知する
view.loadUrl(url);
return true;
}
});

この理由は、Android のソースコードからわかります。True は、ホストアプリケーションが現在の WebView を離れて URL を自身で処理することを希望する場合であり、それ以外の場合は false を返します。

/** 現在の WebView に新しい URL がロードされる直前に、ホストアプリケーションに制御を引き渡す機会を与えます。
* WebViewClient が提供されていない場合、デフォルトでは WebView は Activity Manager に url の適切なハンドラを選択するように要求します。
* WebViewClient が提供されている場合、true を返すと、ホストアプリケーションが url を処理し、false を返すと、現在の WebView が url を処理します。
* このメソッドは、POST "method" を使用するリクエストには呼び出されません。
@param view コールバックを開始する WebView。
@param url ロードする URL。
@return ホストアプリケーションが現在の WebView を離れて URL を自身で処理する場合は true、それ以外の場合は false。
*/

public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}

注意点として、コードに電話をかける(tel:)やメールを送信する(mailto:)場合は、URL を簡単にフィルタリングする必要があります。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。