在Android中通过Javascript隐藏/显示WebView

时间:2011-10-20 19:09:30

标签: javascript android webview

在我的Android网络应用中,我尝试使用javascript(来自远程HTML文件)来控制Android WebView的可见性。

我试图使用addJavascriptInterface类但没有成功。 (见http://developer.android.com/guide/webapps/webview.html

基本上我希望我的javascript成为以下

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

似乎很容易,但我的所有尝试都会导致我的应用在调试过程中崩溃。

我最近的尝试是这样的:

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);
    }
}

2 个答案:

答案 0 :(得分:1)

问题是您在WebView对象中转换字符串“myWebViewID”。 我想这是不可能的。

要做你想做的事,你必须实现类似于将你在JS中使用的字符串转换为标识你的WebView的ID(int)的开关:

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;
        }
    }
}

答案 1 :(得分:1)

这是解决方案:

web视图:

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并更改其可见性!

希望这有帮助!