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

WebView 에서 새창 제어시 onCreateWindow 가 이상하지 말임다.

0 추천

// =====================================
// main.java

// onCreate 에서 웹뷰 세팅

web1 = (WebView) findViewById(R.id.web1);
  web2 = (WebView) findViewById(R.id.web2);
  
  web1.getSettings().setJavaScriptEnabled(true);
  web1.getSettings().setSupportMultipleWindows(true);
  web1.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
  web1.loadUrl("http://127.0.0.1/newwindow.html");
  
  web1.setWebViewClient(new MyWebViewClient());
  web1.setWebChromeClient(new MyWebChromeClient());




public class MyWebViewClient extends WebViewClient {  
     @Override
     public boolean shouldOverrideUrlLoading (WebView view, String url) {
         view.loadUrl(url);        
         return true;
     }
 }

 public class MyWebChromeClient extends WebChromeClient {
     @Override
     public boolean onCreateWindow (WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
         
// 이미 생성된 두번째 WebView 에서 열기
         WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
         transport.setWebView(web2);
         resultMsg.sendToTarget();
         return true;
     }
 }


// =====================================
// main.xml

// 웹뷰 2개 배치

 <WebView
     android:id="@+id/web1"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:layout_weight="1"
     />
 <WebView
     android:id="@+id/web2"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:layout_weight="1"
     />

안녕하세요.

인터넷에서 찾은 소스들을 암만 따라해봐도 제대로 안 되길레 고심끝에 질문을 남깁니다.

부디 도움을 주세요.

 

먼저 위 소스처럼 WebView 2개를 배치하고 1번 웹뷰에서 새창을 여는 간단한 테스트용 페이지를 열게 한 뒤에 앱을 실행합니다.

앱이 실행되면 테스트용 페이지가 뜨고 거기서 버튼을 누르면 2번 웹뷰에서 새창의 내용이 열리게끔 하려는데요.

인터넷을 뒤져본 결과 저런식으로 적용해주면 제 의도대로 돌아가야할 것 같은데....

 

제 폰(갤노트2)에서 테스트해보면 자꾸 [작업을 실행할때 사용할 애플리케이션] 창이 뜨면서 인터넷/크롬 브라우저 둘 중 하나를 선택하라고 뜨네요....-ㅅ-;;;

대체 뭐가 잘못된건지 모르겠사와요... 도와주십쇼!

 

혹시 API level 8 (Android2.2) 이 낮아서 그렇다거나,

이클립스 버전이 예전꺼라 그렇다거나 한건 뭐... 설마 상관없겠쥬?-_-;

 

 

김오리 (120 포인트) 님이 2015년 8월 1일 질문

1개의 답변

0 추천
그렇게 하지 마시고.메소드 발생시 웹뷰 객채를 새로 생성하면 아주 쉽습니다.
마타하르 (500 포인트) 님이 2015년 8월 1일 답변
...