20

多くの投稿を検索して読みましたが、コードでそれを行う方法がわかりません。

アプリで地理位置情報を使用したいのですが、現在htmlファイルに使用しているwebViewClientの代わりにwebChromeClientで表示する必要があり、リンクは同じビューにとどまります。

これを webChromeClient に変更すると、 のような html リンク<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);
4

3 に答える 3

75

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;
    }
});
于 2014-04-07T16:58:40.243 に答える
9

WebChromeClient に加えてダミーの WebViewClient を設定することで、これを回避できました。理由はわかりませんが、この行を削除すると、ブラウザーで Web ページが再び開き始めます。

mBrowser.setWebViewClient(new WebViewClient());
于 2013-03-13T22:09:53.240 に答える
2

ブラウザでリンクを開くには、intentin theshouldOverrideUrlLoadingメソッドを使用してブラウザで 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;
    }
};
于 2013-02-02T21:28:53.990 に答える