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

WebView 에서 자바스크립트를 실행하려 합니다.

0 추천

public class WebViewActivity extends Activity {

	private WebView mWebView = null;
	private WebViewInterface mWebViewInterface;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_web_view);
		
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);
		getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
		
		String uri = getIntent().getStringExtra("uri");
		
		mWebView = (WebView)findViewById(R.id.webview);
		mWebViewInterface = new WebViewInterface(WebViewActivity.this, mWebView);

		mWebView.getSettings().setJavaScriptEnabled(true);
		mWebView.setVerticalScrollbarOverlay(true);
		
		mWebView.addJavascriptInterface(mWebViewInterface, "AppInterface");
		
		mWebView.setWebViewClient(new WebViewClient() {
			
			public boolean shouldOverrideUrlLoading(WebView view, String url) {
				view.loadUrl(url);
				return true;
			}
		});	
		
		mWebView.setWebChromeClient(new WebChromeClient());
		
		mWebView.loadUrl(uri);
	}

	
	public void onBackPressed() {
		if (mWebView.canGoBack()) {
			mWebView.goBack();
			Toast.makeText(this, "previous", 500).show();
		} else {
			super.onBackPressed();
		}
	}

}

 

public class WebViewInterface {
	private WebView mAppView;
    private Activity mContext;
    
    public WebViewInterface(Activity activity, WebView view) {
        mAppView = view;
        mContext = activity;
    }
    
    @JavascriptInterface
    public void toast(String text) {
        HToast.ShowToastLong(text);
        mContext.finish();
    }
}

 

WebViewActivity 에서 WebView 를 띄우고 구현 해 놓은 WebViewInterface 을 호출해서 웹뷰에서 자바스크립트로

웹뷰가 떠있는 액티비티를 죽이는 코드를 구현해놨습니다. (기존 엑티비티에서 웹뷰 액티비티를 불러온 것입니다.)

헌데 아예 자바스크립트인터페이스가 먹히지가 않습니다.

그냥 예제 형식으로 MainActivity 에서 웹뷰 띄우고 하면 잘 되는데 기존 앱에 소스를 추가해 동작시키면

자바스크립트가 먹통이 됩니다.

웃긴것은 디버깅 모드로 돌리면 또 돌아간다는 사실입니다;; 블루스택에서도 잘 돌아갑니다;

 

대체 뭐가 문젠지 모르겠네요...

아, 그리고 팝업 뜰때의 기존 앱과 예제 앱의 팝업 디자인이 다릅니다. 타겟 SDK 도 같은데 왜 이러는지 모르겠습니다;

이게 기존 앱의 웹뷰 다이얼로그 팝업입니다.

 

이게 예제 앱의 웹뷰 다이얼로그 팝업입니다.

 

대체 무슨 차인지 모르겠습니다. 도와주세요 ㅠㅠ

맛탱 (290 포인트) 님이 2014년 12월 1일 질문

1개의 답변

0 추천
WebView 에서 alert 과 confirm 을 정상적으로 동작시키려면

http://www.programdevelop.com/966039/

의 예제와 같이 WebChromeClient 를 만들어서 onJsAlert, onJsConfirm 을 연결 시키구요.

디자인이 다른건 기본 테마가 달라서 그렇습니다.
달기살 (12,990 포인트) 님이 2014년 12월 1일 답변
답변 감사합니다.
혹시 alert 과 confirm 가 한번만 나올 상황이 아닐때, 웹에서 어떤 호출을 했는지 판별하는 방법이 있을까요? 지금은 무조건 다 걸리네요;
...