【问题标题】:Hide/Show WebView via Javascript in Android在 Android 中通过 Javascript 隐藏/显示 WebView
【发布时间】:2011-10-20 19:09:29
【问题描述】:

在我的 Android Web 应用程序中,我尝试使用 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);
    }
}

【问题讨论】:

    标签: javascript android webview


    【解决方案1】:

    问题是您将字符串“myWebViewID”投射到 WebView 对象中。 我想这是不可能的。

    要做你想做的事,你必须实现一个开关之类的东西,将你在 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;
            }
        }
    }
    

    【讨论】:

    • "此方法必须返回 int 类型的结果" on "private int stringToId(String str) {"
    • 删除所有关于R类的导入,然后重试。并在 stringToId 中的 if/else 末尾添加一个 else(已编辑)
    【解决方案2】:

    这是解决方案:

    网页视图:

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

    自定义Javascript接口:

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

    希望这会有所帮助!

    【讨论】:

    • 这仅在您想隐藏与 JSInterface 绑定的 WebView 时才有效。如果你想隐藏另一个webview,这个方法不起作用
    • 因此您假设您在布局中有两个(甚至更多)webview,并且您想从一个 webview 的 HTML 页面控制其他 webview 的状态?不,上面的代码不适用于此。如果这是 Ziygo 想要的,我会尝试另一种选择..
    • “在我的 Android Web 应用程序中,我尝试使用 javascript(来自远程 HTML 文件)来控制 Android WebView 的可见性。” ;)
    • 我明白你的意思 :) 无论如何,Ziygo 可以帮助我们并向我们解释他到底想要什么,我们的任何解决方案都可以解决他的问题 :)
    猜你喜欢
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多