prosource

URL을 클릭하면 기본 브라우저가 열립니다.

probook 2023. 8. 26. 11:58
반응형

URL을 클릭하면 기본 브라우저가 열립니다.

외부 URL을 로드했습니다.WebView이제 제가 필요한 것은 사용자가 로드된 페이지의 링크를 클릭할 때 일반 브라우저처럼 작동하고 동일한 링크를 열어야 한다는 것입니다.WebView그런데 기본 브라우저를 열고 거기에 페이지를 로드하는 건가요?

JavaScript를 활성화했습니다.하지만 여전히 작동하지 않습니다.제가 뭘 잊었나요?

를 사용하는 경우WebView기본 Android 동작을 원하지 않는 경우 직접 클릭을 차단해야 합니다.

의 이벤트를 모니터링할 수 있습니다.WebView를 사용하여.당신이 원하는 방법은 입니다.이렇게 하면 특정 URL을 선택할 때 자신의 작업을 수행할 수 있습니다.

사용자가 설정합니다.WebViewClient당신의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);
    }           
}

공식 문서에 따르면 웹 뷰에서 링크를 클릭하면 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의 대답은 바로 제가 찾던 것이었습니다.

하이퍼링크 클릭에 상관없이 앱 내부에서 웹 검색을 유지하기 위해(따라서 외부 웹 브라우저를 실행하지 않음) 재활용 보기 및 웹 보기가 있는 탐색 드로어로 앱을 작성하고 있습니다.이를 위해 다음 두 줄의 코드를 입력하면 충분합니다.

mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setWebViewClient(new WebViewClient());

정확하게 웹뷰 문 아래에 있습니다.

다음은 구현된 WebView 코드의 예입니다.

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");
}}

이렇게 하면 웹 사이트에서 클릭한 모든 링크가 웹 뷰 내부에 로드됩니다.(모든 SDK가 업데이트된 Android Studio 1.2.2 사용)

언급URL : https://stackoverflow.com/questions/2378800/clicking-urls-opens-default-browser

반응형