web-dev-qa-db-ja.com

Android-外部ブラウザを使用してWebViewでターゲット_blankリンクを開く

Webサイトを表示するWebViewを作成します。 Webサイトには、target="_blank"属性のないリンクと、一部のリンクが含まれています。

外部標準デバイスブラウザーで定義されたtargetとWebView内でリンクのないリンクを開く必要があります。

私はWebViewClientを使用していますが、この関数を試しましたが、それでも私のリンクはすべてWebView内で開かれています:

代替案1:

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {

    return super.shouldOverrideUrlLoading(view, url);        
}

代替案2:

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {

    view.loadUrl(url);
    return true;        
}

空白リンクを外部で開く方法を知っている人はいますか?

ありがとう!

PS:誤解を避けるために: このアプローチ を使用することはできません。リンクを外部的に開く必要があるのはtarget属性だけだからです。

24
Ron

上記のリンクを訪れた後、私はこのコードを思いつき、これが役立つことを願っています。

wv.getSettings().setSupportMultipleWindows(true);
wv.setWebChromeClient(new WebChromeClient() {
    @Override
    public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Android.os.Message resultMsg)
    {
        WebView.HitTestResult result = view.getHitTestResult();
        String data = result.getExtra();
        Context context = view.getContext();
        Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(data));
        context.startActivity(browserIntent);
        return false;
    }
});
48
Carson Ip

同じ問題に直面しました。アプリケーション内でWebサイトページを開き、残りのすべてのページはデフォルトブラウザーで開く必要があります。 1つの手法を使用しました。 URLに私のWebサイト名が含まれている場合、WebViewでそれを開き、すべてのWebサイトをデフォルトのブラウザーで開いたままにします。

以下のコードを見つけて、このような問題に直面したすべての人に役立つと思います。

private class MyBrowser extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.contains("/internetgeeks")) {
            browser.loadUrl(url);
            return false;
        } else {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            startActivity(intent);
            return true;
        }
    }
}
5
user3776637

私も同じ問題を抱えていて、今では解決策を見つけました。

また、WebChromeClientを使用する必要があります。 this および this を確認できます。また、WebViewClientを新しいWebViewに設定し、shouldOverrideUrlLoadingメソッドをオーバーライドすると、URLを取得して、ここで必要なことを実行できます。 WebViewClientを設定しない場合、それも機能するはずです。私の場合、URLを取得したいので、WebViewClientを新しいWebViewに設定します。

ちなみに、古いWebビューを削除してからブラウザから戻った場合、Webビューは空白です。そこで、私はウェブビューを保持し、新しいビューを追加しましたが、可視性を「ゴーン」に設定しました。

1
ffts