테혼
10
2020-11-11 01:11:19 작성 2020-11-11 01:31:19 수정됨
2
199

[JS, 안드로이드] Uncaught ReferenceError: kakao is not defined


안녕하세요. 

저는 안드로이드 개발을 하고 있습니다.


이번에 부모님이 사업을 하시게 되면서 외주로 웹을 만드셨습니다.

앱도 만들고 싶어하셔서 제가 할 줄 아는 안드로이드를 이용해 앱을 만들어드리고 있습니다.

외주로 만들고 있는 웹을 안드로이드 웹뷰로 감싸서 작업을 하고 있습니다.


웹 내부에 카카오맵을 넣는데

웹, 모바일 웹에서는 정상 작동 합니다.


하지만 제가 만들고 있는 앱에서는 

Uncaught ReferenceError: kakao is not defined. source: 지도주소

가 발생하면서 빈 화면이 나옵니다.


검색을 통해 문제 해결을 위해 노력했습니다.

안드로이드에서 페이지 로딩이 끝나기 전에 자바스크립트를 호출해서 생기는 문제이며 페이지 로딩이 끝났을때(onPageFinished 이용) 문제가 생긴 함수를 다시 호출하면 된다는  답이 많았습니다.

예시 소스들에서는 호출해야할 웹의 js함수를 정확히 알고 있고 그것을 호출하면 된다고 합니다.


하지만 저는 웹에서 카카오맵을 보여주기 위해 어떤 함수를 호출 하며 어떻게 돌아가고 있는지 잘 모르겠습니다.

웹 소스를 볼 줄 알긴 하지만 제가 볼 수 있는건 개발자 도구로 보이는 소스 뿐이여서 

java단에서 어떤 함수를 호출하고 돌아가는 지 모르겠습니다.


안드로이드에서 저 혼자 해결할 수 있는 일인지

웹에서 무언가를 해줘야 해결되는 건지 궁금합니다.

0
  • 답변 2

  • OkkyActivity
    389
    2020-11-11 10:35:07

    웹뷰쪽 소스를 보여주실 수 있나여?


    저 에러는 'kakao' 라는 javascript 함수를 찾을 수 없을때 나오는 것 같은데 


    안드로이드 개발자 입장에서.. 거의 웹뷰 연동 에러는 웹쪽 이슈였던 케이스가 많아서여

  • 테혼
    10
    2020-11-11 11:37:25 작성 2020-11-11 11:39:28 수정됨


    public class MainActivity extends AppCompatActivity {
    
        WebView contentWebView;
    
        @SuppressLint("SetJavaScriptEnabled")
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            contentWebView = (WebView) findViewById(R.id.contentWebView);
            WebSettings webSettings = contentWebView.getSettings();
            webSettings.setJavaScriptEnabled(true);
            webSettings.setDomStorageEnabled(true);
            webSettings.setLoadsImagesAutomatically(true);
            webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
    
            contentWebView.setWebViewClient(new WebViewClient() {
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
    
                    String url = String.valueOf(request.getUrl());
    
                    if(url.contains("blog")){
                        url = url.replace("http", "https");
    
                        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                        startActivity(i);
    
                    }else if(url.startsWith("tel:")){
                        Intent dial = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                        startActivity(dial);
                    }else{
                        view.loadUrl(url);
                    }
    
                    return true;
                }
            });
    
            contentWebView.loadUrl("주소");
        }
    
        private long backBtnTime = 0;
    
        @Override
        public void onBackPressed() {
            long curTime = System.currentTimeMillis();
            long gapTime = curTime - backBtnTime;
            if (contentWebView.canGoBack()) {
                contentWebView.goBack();
            } else if (0 <= gapTime && 2000 >= gapTime) {
                super.onBackPressed();
            } else {
                backBtnTime = curTime;
                Toast.makeText(this, "한번 더 누르시면 앱이 종료됩니다.", Toast.LENGTH_SHORT).show();
            }
    
    
        }
    
    }


    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
            <WebView
                android:overScrollMode="never"
                android:id="@+id/contentWebView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fadingEdge="none"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>


    우드로이드 

    답변감사합니다.

    Activity 하나로 작업하고 있었습니다.

    맵쪽 이슈말고 다른 기능은 웹과 동일하게 나오고 있습니다.

    웹쪽 이슈가 원인이라면 웹개발하시는 분께 어떻게 말씀드려야 할지도 고민이네요.. 

  • 로그인을 하시면 답변 을 등록할 수 있습니다.