URL을 클릭하면 기본 브라우저가 열립니다
에 외부 URL을로드했습니다 WebView
. 이제 필요한 것은 사용자가로드 된 페이지의 링크를 클릭하면 일반 브라우저처럼 작동하고 동일한 링크를 열어야한다는 것 WebView
입니다. 그러나 기본 브라우저를 열고 페이지를로드하고 있습니까?
JavaScript를 활성화했습니다. 그러나 여전히 작동하지 않습니다. 내가 잊어 버렸습니까?
를 사용하는 WebView
경우 기본 Android 동작을 원하지 않으면 클릭을 직접 가로 채야합니다.
를 WebView
사용하여 이벤트를 모니터링 할 수 있습니다 WebViewClient
. 원하는 방법은 shouldOverrideUrlLoading()
입니다. 이를 통해 특정 URL을 선택할 때 자신의 작업을 수행 할 수 있습니다.
당신은 설정 WebViewClient
당신이의 WebView
사용 setWebViewClient()
방법 .
WebView
SDK 에서 샘플 을 보면 원하는 것을 수행하는 예제가 있습니다. 다음과 같이 간단합니다.
private class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
경우에 따라 URL로드 방법을 트리거하지 않는 리디렉션을 받으면 onLoadResource를 재정의해야 할 수도 있습니다. 이 경우 다음을 시도했습니다.
@Override
public void onLoadResource(WebView view, String url)
{
if (url.equals("http://redirectexample.com"))
{
//do your own thing here
}
else
{
super.onLoadResource(view, url);
}
}
공식 문서에 따르면 WebView에서 링크를 클릭하면 URL을 처리하는 응용 프로그램이 시작됩니다. 이 기본 동작을 재정의해야합니다.
myWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
});
또는 메소드에 조건부 논리가없는 경우 간단히 수행하십시오.
myWebView.setWebViewClient(new WebViewClient());
코드 에이 두 줄을 추가하십시오-
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.setWebViewClient(new WebViewClient());
이 방법 boolean shouldOverrideUrlLoading(WebView view, String url)
은 API 24에서 더 이상 사용되지 않습니다. 새 장치를 지원하는 경우을 사용해야합니다 boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request)
.
다음과 같이하면 둘 다 사용할 수 있습니다.
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
newsItem.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(request.getUrl().toString());
return true;
}
});
} else {
newsItem.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
}
Arulx Z의 대답은 내가 찾던 것과 정확히 일치했습니다.
I'm writing an app with Navigation Drawer with recyclerview and webviews, for keeping the web browsing inside the app regardless of hyperlinks clicked (thus not launching the external web browser). For that it will suffice to put the following 2 lines of code:
mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setWebViewClient(new WebViewClient());
exactly under your WebView statement.
Here's a example of my implemented WebView code:
public class WebView1 extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView wv = (WebView) findViewById(R.id.wv1); //webview statement
wv.setWebViewClient(new WebViewClient()); //the lines of code added
wv.setWebChromeClient(new WebChromeClient()); //same as above
wv.loadUrl("http://www.google.com");
}}
this way, every link clicked in the website will load inside your WebView. (Using Android Studio 1.2.2 with all SDK's updated)
참고URL : https://stackoverflow.com/questions/2378800/clicking-urls-opens-default-browser
'Programing' 카테고리의 다른 글
MySQL : 어떤 데이터베이스가 선택되어 있는지 확인 하시겠습니까? (0) | 2020.05.06 |
---|---|
SurfaceView와 View의 차이점은 무엇입니까? (0) | 2020.05.06 |
iPad / iPhone에서 CSS 제출 버튼 이상한 렌더링 (0) | 2020.05.06 |
.join () 메소드는 정확히 무엇을합니까? (0) | 2020.05.06 |
스칼라에서 목록의 끝에 요소 추가 (0) | 2020.05.06 |