私は多くの投稿を検索して読みましたが、コードでそれを行う方法を理解できません。
アプリでジオロケーションを使用したいのですが、現在HTMLファイルに使用しているwebViewClientの代わりにwebChromeClientで表示する必要があり、リンクは同じビューにとどまります。
これをwebChromeClientに変更すると、<a href="http://url/file.php?q=123"
、ブラウザで突然開いています!
どうすればこれを防ぐことができますか?
myWebView = new WebView(this);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.getSettings().setLoadWithOverviewMode(true);
myWebView.getSettings().setUseWideViewPort(true);
myWebView.getSettings().setGeolocationEnabled(true);
myWebView.setWebChromeClient(new WebChromeClient() {
public void onGeolocationPermissionsShowPrompt(String Origin, Android.webkit.GeolocationPermissions.Callback callback) {
callback.invoke(Origin, true, false); }
});
myWebView.loadUrl("file:///Android_asset/HTML/index.html");
setContentView(myWebView);
WebChromeClient にはshouldOverrideUrlLoadingメソッドが含まれていませんが、WebViewClientには含まれています。 「WebView」は、指定されている場合、WebViewClientとWebChromeClientの両方を同時に使用でき、また使用します。 WebViewClientは、クライアントが割り当てられていない場合に使用できないメソッドを追加します(Webビューでナビゲーションを維持します)。 WebChromeClientと同じように、使用できる特定のメソッドがあります(ロード時にページタイトルを取得するなど)。
したがって、次のようにコードをビルドできます。
WebView web = (WebView)findViewById(R.id.web);
WebSettings webSettings = web.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setGeolocationEnabled(true);
webSettings.setSupportMultipleWindows(true); // This forces ChromeClient enabled.
web.setWebChromeClient(new WebChromeClient(){
@Override
public void onReceivedTitle(WebView view, String title) {
getWindow().setTitle(title); //Set Activity tile to page title.
}
});
web.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return false;
}
});
WebChromeClientに加えてダミーのWebViewClientを設定することで、これを回避することができました。理由はわかりませんが、この行を削除すると、Webページがブラウザーで再び開き始めます。
mBrowser.setWebViewClient(new WebViewClient());
ブラウザーでリンクを開くには、intent
メソッドでshouldOverrideUrlLoading
を使用してブラウザーでURLを起動するのではなく、webview
を使用してリンクを処理します。
webView.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url != null && url.startsWith("http://")) {
view.getContext().startActivity(
new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
return true;
} else {
return false;
}
}
}
WebViewでロードしたい場合は、以下を使用します。
WebViewClient yourWebClient = new WebViewClient()
{
// Override page so it's load on my view only
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
// This line we let me load only pages with an anchor tag
if ( url.contains("url") == true )
//Load new URL Don't override URL Link
return false;
// Return true to override url loading (In this case do nothing).
return true;
}
};