2013-08-12 94 views
14

ウェブサイトを表示するWebViewをビルドします。このウェブサイトにはtarget="_blank"属性のないリンクとそれに伴うリンクが含まれています。Android - 外部ブラウザでWebViewの_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:誤解を避けるため:this approachを使用することはできません。外部からリンクを開く必要があるのは、target属性です。

答えて

30

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

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; 
    } 
}); 
+2

onCreateWindowがいつトリガするかを理解することが重要です。よりよく理解するには[link](http://therockncoder.blogspot.in/2014/04/understanding-androids-webchromeclient.html)をご覧ください –

+0

通常のwebviewclientでこれを行う方法はありますか? –

+0

時には 'data'がnullです –

0

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

また、WebChromeClientを使用する必要があります。thisthisを参照してください。 WebViewClientを新しいWebViewに設定し、shouldOverrideUrlLoadingメソッドをオーバーライドすると、URLを取得してここで必要な処理を実行できます。 WebViewClientを設定しないと、それもうまくいくはずです。私の場合は、WebViewClientを新しいWebViewに設定するためにURLを取得したいと思います。

ところで、古いWebviewを削除すると、ブラウザから戻ると、Webviewは空白になります。だから私はwebviewを保持し、新しいものを追加しましたが、可視性を "なくなった"ように設定しました。

3

私は同じ問題に直面しました。私はアプリケーション内で自分のWebサイトのページを開いて、すべてのページがデフォルトブラウザで開いているはずです。私は1つのテクニックを使いました。 URLにWebサイトの名前が含まれている場合は、WebViewで開き、Defaultブラウザで開いているすべての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; 
     } 
    } 
} 
+0

Carson-ipの答えが良いです:それはネイティブに' target = "_ blank" 'を尋ねられたとおりに処理します。 – Guillaume

+0

私はstartActivityを使用することはできませんでした。私は 'intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);'と呼び、 'view.Context.ApplicationContext.StartActivity(intent);でアクティビティを呼び出しました。 – Daniel

関連する問題