2013-08-12 3 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;   
} 

아무도 외부 링크를 여는 방법을 알고 있습니까?

감사합니다.

추 신 : 이해 상충을 피하려면 : 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를 유지하고 새로운 것을 추가했지만 가시성을 "사라"로 설정했습니다.

3

나는 동일한 문제에 직면했다. 응용 프로그램 내에서 내 웹 사이트 페이지를 열고 모든 페이지가 기본 브라우저에서 열려 있어야합니다 싶었어. 나는 하나의 기법을 사용했다. URL에 내 웹 사이트 이름이 포함되어 있으면 WebView에서 열고 기본 브라우저에서 열린 모든 웹 사이트를 닫습니다.

아래 코드에서 찾으십시오. 나는 그런 문제에 직면 한 모든 사람들에게 유용 할 것입니다.

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

관련 문제