차근차근/Android

shouldOverrideUrlLoading(WebView view, String url)

예쁜꽃이피었으면 2014. 7. 29. 00:45

http://skyswim42.egloos.com/3835420

 


webviewClient.java 에 shouldOverrideUrlLoading 이라는 function 이 있다.

이 함수는 페이지 이동시 등등에 항상 불린다..


좀 자세히 보자..

 


1. bool WebFrame::canHandleRequest(const WebCore::ResourceRequest& request) {

    jboolean ret = env->CallBooleanMethod(mJavaFrame->frame(env).get(), mJavaFrame->mHandleUrl, jUrlStr);
}
: webkit core 에서 호출함.

==>

2. public boolean handleUrl(String url) {
        if (mCallbackProxy.shouldOverrideUrlLoading(url)) {
}

==>

3.     public boolean shouldOverrideUrlLoading(String url) {
        Message msg = obtainMessage(OVERRIDE_URL);
        msg.getData().putString("url", url);
        msg.obj = res;
        synchronized (this) {
            sendMessage(msg);
}

==>

4. handleMessage

            case OVERRIDE_URL:
                String overrideUrl = msg.getData().getString("url");
                boolean override = uiOverrideUrlLoading(overrideUrl);

==>

5.     public boolean uiOverrideUrlLoading(String overrideUrl) {

            override = mWebViewClient.shouldOverrideUrlLoading(mWebView,
                    overrideUrl);
}

==>

결국 browseractivity.java 의 shouldOverrideUrlLoading 이 호출된다..

return false 이면 google browser 가 처리하고 return true 이면 다른 app 가 처리한다.. 


반응형