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
属性だけだからです。
上記のリンクを訪れた後、私はこのコードを思いつき、これが役立つことを願っています。
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;
}
});
同じ問題に直面しました。アプリケーション内で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;
}
}
}
私も同じ問題を抱えていて、今では解決策を見つけました。
また、WebChromeClientを使用する必要があります。 this および this を確認できます。また、WebViewClientを新しいWebViewに設定し、shouldOverrideUrlLoadingメソッドをオーバーライドすると、URLを取得して、ここで必要なことを実行できます。 WebViewClientを設定しない場合、それも機能するはずです。私の場合、URLを取得したいので、WebViewClientを新しいWebViewに設定します。
ちなみに、古いWebビューを削除してからブラウザから戻った場合、Webビューは空白です。そこで、私はウェブビューを保持し、新しいビューを追加しましたが、可視性を「ゴーン」に設定しました。