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

Webview에 iframe에서 링크 시 오류 관련 질문 입니다.

0 추천

안녕하세요.

현재 서비스 준비 중인 웹앱에 페이스북 페이지를 서비스 하기 위해서 facebook 에서 제공해주는 like box social plugin 을

이용하여 페이스북 기업 페이지를 붙여놓았습니다. 

 

여기까지는 문제 없이 진행했는데 페이지에 이미지나 동영상들 링크를 클릭하면 x-frame-options 관련 오류가 납니다.

보안상 iframe에서 크로스도메인 사이트로 접근하는 게 막혀 있는건 이해하겠습니다.

그래서 target을 _blank로 하여 웹뷰의 iframe이 아닌 내장브라우저를 호출 하려고 해도 아래와 같은 오류가 계속 나네요.

 
 
09-18 14:59:44.831: I/chromium(21933): [INFO:CONSOLE(0)] "Refused to display 'https://m.facebook.com/showglestar/photos/pb.610468875676540.-2207520000.1411017681./745902685466491/?type=1&source=54' in a frame because it set 'X-Frame-Options' to 'DENY'.", source: http://showgle.co.kr/ci/mobile/story2 (0)
 
 
원인 파악을 위해서 테스트를 해보았습니다.
a.html 파일에서 b.html파일을 iframe으로 불러왔습니다.
b.html 파일에는 아래와 같이 facebook 으로 링크되는 소스만 넣어보았습니다.
 
이렇게 했을 내장 브라우저가 실행되면서 페이스북 페이지가 열릴때도 있고 안될때도 있습니다.. 이해할 수가 없습니다.
 
 
원하는 건 웹앱에서 iframe 안에 anchor 태그의 target이 _blank 일 때 내장 브라우저를 호출하여 띄우는 것입니다.
AndroidManifest.xml 파일에서 뭔가 퍼미션 설정을 더 줘야 하는건지.
웹뷰의 setJavaScriptEnabled, setJavaScriptCanOpenWindowsAutomatically, setSupportMultipleWindows
설정 이외에 따로 설정해줘야 하는 부분이 있는건지 궁금합니다.
 
swllno (120 포인트) 님이 2014년 9월 18일 질문
음.. 장황하게 쓰긴 썼지만 정리해보면 웹뷰에서 <a href="" target="_blank"></a> (새로운창)을 띄울려면 웹뷰에  setSupportMultipleWindows 설정만 해주면 되네요.
setSupportMultipleWindows 설정하려면 필수로 오버라이트 해줘야 하는 메소드가 있는데 아래와 같습니다.

mweb.setWebChromeClient(new WebChromeClient() {
            @Override
              public boolean onCreateWindow(WebView view, boolean dialog,
                boolean userGesture, Message resultMsg) {
            WebView childView = new WebView(view.getContext());
                    내부 브라우저를 띄우는 소스
                    return true;
              }
            
            @Override
                public boolean onJsAlert(WebView view, String url, String message, final android.webkit.JsResult result) {
                new AlertDialog.Builder(that).setTitle("얼럿제목").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;
                }
            
            });


이렇게 해주면 웹뷰(웹뷰의 Iframe) 에서 새로운 창을 띄울수 있습니다 ㅎㅎ
ps. 안드로이드를 전혀 몰라서 하루 꼬박 걸렸네요 ㅋㅋ

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...