2011-10-20 4 views
0

안드로이드 웹 응용 프로그램에서 자바 스크립트 (원격 HTML 파일에서)를 사용하여 Android WebView의 가시성을 제어하려고합니다.안드로이드에서 Javascript를 통해 WebView 숨기기/표시

나는 성공적으로 addJavascriptInterface 클래스를 사용하려고 시도했다.

은 기본적으로 내 자바 스크립트가 쉽게 될 것 같은 다음

<script> 
function this() { 
    Android.hideView('myWebViewID'); 
} 
window.onload = this; 
</script> 

보인다 싶습니다 (http://developer.android.com/guide/webapps/webview.html 참조), 아직 내 모든 시도는 내 응용 프로그램 디버깅시 충돌이 발생합니다.

public class JavaScriptInterface { 
    Context mContext; 
    JavaScriptInterface(Context c) { 
     mContext = c; 
    } 
    public void hideView(View v) { 
     WebView webview_x = (WebView) v; 
     webview_x.setVisibility(View.GONE); 
    } 
} 

답변

1

문제는 당신이 웹보기 개체의 문자열 "myWebViewID"를 캐스팅하는 것입니다 :

내 최신 시도는이 라인을 따라 뭔가이었다. 나는 이것이 불가능하다고 생각한다.

public class JavaScriptInterface { 
    private Activity mContext; 

    JavaScriptInterface(Activity c) { 
     mContext = c; 
    } 

    public void hideView(String v) { 
     int id = stringToId(v); 
     WebView webview_x = (WebView) mContext.findViewById(id); 
     webview_x.setVisibility(View.GONE); 
    } 

    private Integer stringToId(String str) { 
     if(str.equals("stringForId1") { 
      return R.id.webView1; 
     } else if(str.equals("stringForId2") { 
      return R.id.webView2; 
     } else if(...) { 
      .... 
     } else { 
      return null; 
     } 
    } 
} 
+0

"이 메소드는"private int stringToId (String str) { " – Ziygo

+0

"R "에 대한 모든 가져 오기를 제거한 후 다시 시도하십시오. 그리고 if/else의 끝에 else를 추가하십시오 (편집 된 포스트) –

1

이 솔루션은 다음과 같습니다 :

당신이 원하는 것을 수행하려면, 당신은 당신의 웹보기를 식별 당신은 ID (INT)에 JS에서 사용하는 문자열을 변환하는 스위치 같은 것을 구현해야

웹보기 :

mWebView = (WebView) findViewById(R.id.webview); 
mWebView.setWebChromeClient(new CustomWebChromeClient()); 
mWebView.addJavascriptInterface(new CustomJavaScriptInterface(), 
       "android"); 
mWebView.loadUrl("file:///android_asset/www/test.html"); 

CustomeJavascriptInterface :

final class CustomJavaScriptInterface { 

    public void hide() { 

     mHandler.post(new Runnable() { 
      public void run() { 
       mWebView.setVisibility(View.INVISIBLE); 
      } 
     }); 
    } 
} 

HTML :

<div onclick="window.android.hide()">Click!</div> 

당신이 괜찮해야합니다!

웹 뷰에 액세스 할 수 없으며 처리기없이 가시성을 변경할 수 없습니다.

희망이 도움이됩니다.

+0

이것은 JSInterface로 묶인 WebView를 숨기고 싶을 때만 작동합니다. 다른 웹보기를 숨기려면이 방법은 작동하지 않습니다. –

+0

레이아웃에 두 개 (또는 그 이상)의 웹보기가 있다고 가정하고 한 웹 페이지의 HTML 페이지에서 다른 웹보기의 상태를 제어하고 싶습니까? 아니요, 위의 코드는이를위한 것이 아닙니다. 이것이 Ziygo가 원한다면 다른 대안을 시도해 보겠습니다. –

+0

"Android 웹 앱에서 Javascript (원격 HTML 파일에서)를 사용하여 Android WebView의 가시성을 제어하려고합니다." ;) –

관련 문제