2011-10-20 40 views
0

私のAndroidウェブアプリケーションでは、Android WebViewの可視性を制御するためにjavascript(リモートHTMLファイルから)を使用しようとしています。AndroidのJavascriptでWebViewを非表示/表示する

私は、成功していないaddJavascriptInterfaceクラスを使用しようとしました。

は基本的に私は私のjavascriptのは、それが簡単だろうように、次の

<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

問題は、あなたがWebViewのオブジェクト内の文字列「myWebViewID」をキャストしていることである。

私の最新の試みは、これらの線に沿って何かでした。 これは不可能だと思います。

あなたが欲しいものを行うには、あなたがあなたのWebViewを識別するID(整数)にJSで使用する文字列を変換するスイッチのようなものを実装する必要があります。

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

"このメソッドは、" int型の結果を返す必要があります "private" stringToId(String str){" – Ziygo

+0

Rクラスに関するすべてのインポートを削除し、再試行します。 stringToId内のif/elseの末尾にelseを追加します(編集済み) –

1

これがソリューションです。

のWebView:

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> 

あなたはこれで問題ないはず!

ハンドブックなしでWebViewにアクセスして表示を変更することはできません。

希望すると便利です。

+0

これは、JSInterfaceで囲まれたWebViewを非表示にする場合にのみ機能します。別のWebviewを非表示にしたい場合は、このメソッドは機能しません –

+0

レイアウト内に2つ(またはそれ以上)のWebviewがあり、そのWebViewのHTMLページから他のWebviewの状態を制御したいとしますか?いいえ、上記のコードはこれではありません。 –

+0

"私のAndroidウェブアプリケーションでは、Android WebViewの可視性を制御するために(リモートHTMLファイルからの)javascriptを使用しようとしています。" ;) –

関連する問題