마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

웹뷰에 로딩된 웹사이트의 자바스크립트 무반응 문의 드립니다.

0 추천

안드로이드 스튜디오로 간단한 하이브리드 앱을 만들어 보고 있습니다.

앱 + 그누보드 사이트

webView.loadUrl("http://test.co.kr");

위 코드로 연결해서 작동은 잘 됩니다. 그런데 일부 버튼들이 작동을 안합니다.

게시판의 글쓰기를 선택하면 위 화면이 나옵니다.

저기서 사진 버튼을 누르면

위 화면이 나옵니다. 저기서 파일선택과 전체삭제 버튼은 구글링으로 

private File createImageFile()
public boolean onShowFileChooser
public void openFileChooser

위 코드들을 입력해서 작동이 됩니다.

그런데 문제는

이런식으로 파일선택 한 후 아래 등록 버튼을 눌러야

이전 화면으로 이미지가 전송되면서 글쓰기가 가능한데 무반응입니다.ㅠㅠ

PC, 모바일 웹에서는 잘 작동하는 버튼인데 앱으로 구동하면 무반응입니다ㅠㅠ

저 등록 버튼의 코드는

<!-- //header -->
    <div class="content_container">
        <div class="drag_explain">
            <p>마우스로 드래그하여 순서를 바꿀수 있습니다.</p>
            <div class="file_selet_group">
            <span class="btn btn-success fileinput-button">
                <span>파일선택</span>
                <!-- The file input field used as target for the file upload widget -->
                <input id="fileupload" type="file" name="files[]" multiple accept="image/*">
            </span>
            <button type="button" class="btn btn-danger delete" id="all_remove_btn">
                <span>전체삭제</span>
            </button>
            </div>
        </div>
        <div class="drag_area" id="drag_area">
            <ul class="sortable" id="sortable">
            </ul>
            <em class="blind">마우스로 드래그해서 이미지를 추가해주세요.</em><span id="guide_text" class="bg hidebg"></span>
        </div>
        <div class="seletion_explain">이미지는 한번에 10개까지 선택할수 있습니다.</div>
        <div class="btn_group">
            <button type="button" class="btn" id="img_upload_submit">
                <span>등록</span>
            </button>
            <button type="button" class="btn" id="close_w_btn" >
                <span>취소</span>
            </button>
        </div>
    </div>

이렇게 구성되어 있습니다. html 파일입니다.

안드로이드 코드는 이런식으로 구성되어있습니다

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    WebChromeClient testChromeClient = new WebChromeClient();

    // Configure Google Sign In
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(getString(R.string.default_web_client_id))
            .requestEmail()
            .build();


    //webview
    webView = (WebView) findViewById(R.id.webView);
    webView.setWebViewClient(new WebViewClient());
    webView.setWebChromeClient(testChromeClient);

    webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setLoadWithOverviewMode(true);
    webSettings.setAllowFileAccess(true);
    webSettings.setDomStorageEnabled(true);
    webView.setNetworkAvailable(true);

    webView.setWebViewClient(new Client());
    webView.setWebChromeClient(new ChromeClient());



    if (Build.VERSION.SDK_INT >= 19) {
        webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
        webSettings.setAllowFileAccessFromFileURLs(true);
        webSettings.setAllowUniversalAccessFromFileURLs(true);
    }
    else if (Build.VERSION.SDK_INT >= 11 && Build.VERSION.SDK_INT < 19) {
        webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    }
    else if(Build.VERSION.SDK_INT >= 21) {
        webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
    }

    else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN){
        webSettings.setAllowUniversalAccessFromFileURLs(true);
        webSettings.setAllowFileAccessFromFileURLs(true);
    }


    webView.getSettings().setBuiltInZoomControls(false);
    webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    webView.getSettings().setLightTouchEnabled(true);
    webView.getSettings().setSavePassword(true);
    webView.getSettings().setSaveFormData(true);
    webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);

    webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
    webSettings.setPluginState(WebSettings.PluginState.ON_DEMAND); // 플러그인을 사용할 수 있도록 설정
    webSettings.setSupportMultipleWindows(false); // true 여러개의 윈도우를 사용할 수 있도록 설정.. 근데 true로 하면 앱 구동시 또 다른 버튼들이 먹통이 됨

    webView.clearCache(true);
    webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

    webSettings.setUseWideViewPort(true);





    webView.loadUrl("http://test.co.kr");



}

이걸로 1주일을 고생하네요ㅠㅠ 조언 부탁드립니다.. ㅠㅠ

 

 

 

컬러색종이 (300 포인트) 님이 2018년 8월 30일 질문

1개의 답변

0 추천
 
채택된 답변
오래되어서 정확하게 기억이 안나는데 저게 안되서

안드로이드 네이티브로 okhttp로 별도로 파일 포스팅을 한 것 같네요..

 

버전 이슈도 있었던 것 같네요..
Will Kim (43,170 포인트) 님이 2018년 8월 30일 답변
컬러색종이님이 2019년 1월 24일 채택됨
...