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

안드로이드 웹뷰 회원가입창에서 주소입력란 질문입니다.

0 추천
기존에 있는 홈페이지에서 회원가입을 할 때, 주소입력시 새 창을 WebChromeClient로 띄우고 주소를 입력시킨다음에 확인 버튼을 눌러도 아무런 동작을 하지 않습니다.  혹시 확인버튼칸이 한글로 되어있지 않긴한데

그게 상관있을까요?

아니면 WebChromeClient는 한글이 깨지던데  방법이있을까요?
익명사용자 님이 2016년 5월 24일 질문

1개의 답변

0 추천

Webview.getSettings().setJavaScriptEnabled(true);

위 코드가 누락된것 같네요.

라쎄린드 (25,460 포인트) 님이 2016년 5월 24일 답변
해도 안됩니다 다른방법은 없을까요
원래 다른곳에서, 혹은 웹브라우저로 했을때 되는 웹페이지인가요?
만약 되는거라면 웹뷰 설정코드나 오버라이드 메소드상에서 구현이 덜된건데
소스한줄 없이 알기는 힘들거 같네요.
public class MainActivity extends Activity implements OnTouchListener, View.OnClickListener {
    private WebView mWebView;
    final Context context = this;
   
    @SuppressLint("SetJavaScriptEnabled")
    @SuppressWarnings("deprecation")
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mWebView = (WebView) findViewById(R.id.webView1);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        mWebView.setBackgroundColor(0); // 배경색
        mWebView.setVerticalScrollbarOverlay(true); // 스크롤 영역 웹뷰에 오버레이
       
       
        WebSettings settings = mWebView.getSettings();
        settings.setLoadWithOverviewMode(true);
        settings.setJavaScriptEnabled(true);
        settings.setUseWideViewPort(true);
       
        // javascript의 window.open 허용
        mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        mWebView.getSettings().setSupportMultipleWindows(true); // 여러개 윈도우를 사용
        mWebView.getSettings().setDefaultTextEncodingName("UTF-8");
       
        // meta태그의 viewport사용 가능
        // mWebView.getSettings().setUseWideViewPort(true); // wide viewport 사용
        mWebView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
       
        // zoom 허용
        mWebView.getSettings().setBuiltInZoomControls(true);
        mWebView.getSettings().setSupportZoom(true);
        // 스크롤 기
        mWebView.setHorizontalScrollBarEnabled(true); // 세로 스크롤 제거
        mWebView.setVerticalScrollBarEnabled(false); // 가로 세로 제거
        mWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        mWebView.getSettings().setPluginState(PluginState.ON);
       

        mWebView.setWebViewClient(new WebViewClient() {

            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url.startsWith("sms:")) {
                    Intent i = new Intent(Intent.ACTION_SENDTO, Uri.parse(url));
                    startActivity(i);
                    return true;
                }
                if (url.startsWith("kakaolink:")) {
                    Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    startActivity(i);
                    return true;
                }
                if (url.startsWith("tel")) {
                    Intent i = new Intent(Intent.ACTION_DIAL);
                    i.setData(android.net.Uri.parse(url));
                    startActivity(i);
                } else {
                    view.loadUrl(url);

                }
                return true;
            }

            public void onReceivedError(WebView view, int errorCode, String description, String fallingUrl) {
                view.loadData("<html><body></body></html>", "text/html", "UTF-8");
                view.getSettings().setDefaultTextEncodingName("utf-8");
            }

            @Override
            public void onPageFinished(final WebView view, final String url) {
                super.onPageFinished(view, url);
                mWebView.invalidate();
                /*
                 * 화면꽉찬 WebView로 바꾸기
                 *
                 * invalidate를 안해주게 되면 webview에 스크롤바만 생기게 되서 화면이 보기 안좋게 되어 버린다.
                 * 그러므로 꼭 invalidate를 해줘야 한다.
                 */
            }
        });

        mWebView.setWebChromeClient(new WebChromeClient() {

            @Override
            public boolean onJsAlert(WebView view, String url, String message, final android.webkit.JsResult result) {
                new AlertDialog.Builder(context).setTitle("Alert title").setMessage(message)
                        .setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        result.confirm();
                    }
                }).setCancelable(false).create().show();
                return true;
            }

            @Override
            public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {
                // TODO Auto-generated method stub
                // return super.onJsConfirm(view, url, message, result);
                new AlertDialog.Builder(view.getContext()).setTitle("알림").setMessage(message)
                        .setPositiveButton("확인", new AlertDialog.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        result.confirm();
                    }
                }).setNegativeButton("아니오", new AlertDialog.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        result.cancel();
                    }
                }).setCancelable(false).create().show();
                return true;
            }

            @Override
            public boolean onJsPrompt(WebView view, String url, String message, String defaultValue,
                    JsPromptResult result) {
                return super.onJsPrompt(view, url, message, defaultValue, result);
            }

            public void onCloseWindow(WebView window) {
                window.setVisibility(View.GONE);
                mWebView.removeView(window);
            }

        });

        mWebView.loadUrl("http://www.****.com/"); // 웹뷰에서 불러올 URL 입력
    }

웹브라우저에서는 되는 페이지입니다
설정코드는 제가 생각하기엔 다 되어있는데...
한번 봐주시면 감사하겠습니다 ㅠㅠ
자식웹뷰를 새창으로 띄워서 주소검색후 결과값을 부모웹뷰로 전달해줘야합니다
...